2017-11-18 234 views
0
typedef struct { 
    long long int mem_0; 
} Tuple1; 

typedef struct { 
    int tag; 
    union { 
     struct Tuple1 Union0Case0; 
    } data; 
} Union0; 

C:/Users/Marko/Documents/Visual Studio 2015/Projects/Multi-armed Bandit Experiments/SpiralExample/bin/Release/cuda_kernels.cu(10): error: incomplete type is not allowed爲什麼typedefed結構無法用NVCC編譯?

上面確實在GCC 5.3.0編譯器上編譯。當我把它改成這樣,它的工作原理:

struct Tuple1 { 
    long long int mem_0; 
}; 

struct Union0 { 
    int tag; 
    union { 
     struct Tuple1 Union0Case0; 
    } data; 
}; 
+2

這個錯誤對我來說似乎是完全合理的。你想在聯合中使用'Tuple1 Union0Case0'。在沒有點您是否聲明瞭一個名爲'Tuple1'的命名結構體? – talonmies

+0

我沒有?那麼第一個typedef應該是什麼? –

+2

這是一個* unnamed * struct(沒有名稱跟在關鍵字'struct'後面)。 – njuffa

回答

2

總結各種意見,回答使這個問題脫落的CUDA標籤未應答隊列。

此:

typedef struct { 
    long long int mem_0; 
} Tuple1; 

限定含有無名結構的類型。沒有定義struct Tuple1

此,在另一方面,定義了這樣的結構:

struct Tuple1 { 
    long long int mem_0; 
}; 

並且這定義了一個包含這種命名結構的類型:

typedef struct Tuple1 { 
    long long int mem_0; 
} Tuple1_t; 

任何後兩者是兼容你的其他代碼。