2017-11-18 13 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 allowedtypedefed構造体が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

名前のない* 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; 

を後者の2種のいずれかと互換性があるであろうあなたの他のコード。

関連する問題