为什么 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;

后两者中的任何一个都与您的其他代码兼容。