【问题标题】:C++ struct "Incomplete type is not allowed"C ++结构“不允许不完整类型”
【发布时间】:2016-05-08 11:59:06
【问题描述】:

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

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

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

提前致谢。

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

【问题讨论】:

  • 使用int idk[3] = { 1,2,3 };
  • 大多数时候,数组的大小可以从初始化器中推导出来。但这不适用于作为类成员的数组。对于这些,您必须明确说明尺寸。
  • 与变量定义不同,非静态类数据成员的默认成员初始化器不是该成员可以拥有的唯一初始化器,因此它不适合推断数组大小。

标签: c++ arrays struct


【解决方案1】:

在局部范围内(例如在函数体中)声明变量时,您可以这样做,编译器不会报错,它会推断出您的意思是一个包含 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': 数组绑定不能从类内初始化器推导出来

这很明确。

米克

【讨论】:

  • 我有 Visual Studio,但由于某种原因我没有收到该错误。我做了研究,但每次人们讨论结构数组时。但是感谢您的解释。
【解决方案2】:
 array bound cannot be deduced from an in-class initializer

所以把sn-p改成

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

编译成功。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-08
    • 2011-05-13
    • 2011-08-12
    相关资源
    最近更新 更多