C ++ struct“不允许使用不完整类型”

时间:2016-01-30 20:28:09

标签: c++ arrays struct

当我尝试在结构中定义数组时,是否有人知道此错误的含义以及为什么会发生错误?

struct test{
    int idk[] = { 1,2,3 };
};

为什么数组idk不完整类型或什么?

提前致谢。

聚苯乙烯。 我需要这个,所以我可以从测试结构中访问这些数组。

2 个答案:

答案 0 :(得分:3)

在本地范围内声明变量时(例如在函数体中),你可以这样做,编译器不会抱怨,它会推断你是指3个元素的int数组。

void someFunc()
{
    int idk[] = { 1,2,3 }; // Ok, so idk is in fact a int[3];
    // Do whatever work...
}

在类或结构声明中执行相同的操作时,编译器不希望为您推断出这一点,因此基本上,您需要更严格。

为了完整的原因,你可以在这里(What is the reason for not being able to deduce array size from initializer-string in member variable?)看到其他地方。

所以,为了使它成功,你需要这样:

struct test 
{
    int idk[3] = { 1,2,3 };
};

至于为什么人们可能不喜欢这个问题,这是一个平凡的问题,谷歌中的任何搜索都会产生答案。编译器本身将退出错误,只是搜索它将在大多数时间为您找到答案。

基本上,这类问题告诉社区,你在提出问题之前没有做过任何研究。

使用visual studio编译器,它会产生以下错误: 错误C2997'test :: idk':无法从类内初始化程序

推导出数组绑定

这是非常明确的。

米克

答案 1 :(得分:1)

 array bound cannot be deduced from an in-class initializer

将代码段更改为

struct test{
int idk[3] = { 1,2,3 };

导致编译成功。