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

Ope*_*iac 5 c++ arrays struct

有谁知道这个错误是什么意思以及为什么在我尝试在结构中定义数组时会发生这种错误?

struct test{
    int idk[] = { 1,2,3 };
};
Run Code Online (Sandbox Code Playgroud)

为什么数组 idk 是不完整类型之类的?

提前致谢。

附言。我需要这个,所以我可以从测试结构访问这些数组。

小智 5

当在局部作用域中声明变量时(例如在函数体中),您可以这样做,编译器不会抱怨,它会推断出您的意思是一个由 3 个元素组成的 int 数组。

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

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

要了解完整的原因,您可以在其他地方查看(What is the Reason for not able to deduced array size frominitializer-string in member variable?)等地方。

因此,要使其正常工作,您需要这样做:

struct test 
{
    int idk[3] = { 1,2,3 };
};
Run Code Online (Sandbox Code Playgroud)

至于为什么人们可能不喜欢这个问题,这是一个普通的问题,实际上在谷歌中的任何搜索都会得到答案。编译器本身会消除错误,并且只需搜索该错误即可在大多数情况下为您找到答案。

基本上,此类问题是在告诉社区,您在提出问题之前没有进行任何研究。

使用 Visual Studio 编译器,它会创建以下错误:错误 C2997 'test::idk': 无法从类内初始值设定项推导出数组界限

这是非常明确的。

米克