为什么 typedefed 结构无法使用 NVCC 进行编译?
Why does the typedefed struct fail to compile with NVCC?
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
以上内容实际上是在 GCC 5.3.0 编译器上编译的。当我把它改成这个时,它起作用了:
struct Tuple1 {
long long int mem_0;
};
struct Union0 {
int tag;
union {
struct Tuple1 Union0Case0;
} data;
};
将评论总结为答案,以便此问题从 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;
后两者中的任何一个都与您的其他代码兼容。
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
以上内容实际上是在 GCC 5.3.0 编译器上编译的。当我把它改成这个时,它起作用了:
struct Tuple1 {
long long int mem_0;
};
struct Union0 {
int tag;
union {
struct Tuple1 Union0Case0;
} data;
};
将评论总结为答案,以便此问题从 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;
后两者中的任何一个都与您的其他代码兼容。