为什么typedefed结构无法使用NVCC编译?

时间:2017-11-18 09:33:15

标签: cuda 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):错误:不允许不完整类型

以上确实在GCC 5.3.0编译器上编译。当我将其更改为此时,它可以工作:

struct Tuple1 {
    long long int mem_0;
};

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

1 个答案:

答案 0 :(得分: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;

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