【问题标题】:a value of type "int" cannot be used to initialize an entity of type "int [0]"“int”类型的值不能用于初始化“int [0]”类型的实体
【发布时间】:2022-01-25 12:35:01
【问题描述】:
#include<iostream>
using namespace std;

class student
{
    public:
    int data1 = 0;
    int data2 = 0;
    int data3 = 0;

    void setData(int d1, int d2, int d3)
    {
        data1 = d1;
        data2 = d2;
        data3 = d3;
    }

    int data[3]; 
    data[0] = data1;
    data[1] = data2;
    data[2] = data3;
};

在 VsCode 中,data[0]、data[1] 和 data[2] 上有突出显示的错误消息 --> “此声明没有存储类或类型说明符”

在我初始化 data[0] = data1 的同一行中,出现错误消息 --> ““int”类型的值不能用于初始化“int [0]”类型的实体“

这些错误的含义是什么。

【问题讨论】:

  • 在第一种情况下,赋值是函数的一部分。在第二种情况下,它们在任何功能之外,这是不允许的。

标签: c++ class oop


【解决方案1】:

问题是您直接在类定义中为data[0]data[1]data[2] 赋值,而不是在成员函数中进行赋值.

您可以解决此问题,方法是替换 int data[3]; 为:

int data[3]{data1, data2, data3};

另外,删除以下三个陈述:

//remove these three statements 
 data[0] = data1;
 data[1] = data2;
 data[2] = data3;

修改代码

所以修改后的代码如下:

class student
{
    public:
    int data1 = 0;
    int data2 = 0;
    int data3 = 0;

    void setData(int d1, int d2, int d3)
    {
        data1 = d1;
        data2 = d2;
        data3 = d3;
    }

    int data[3]{data1, data2, data3}; //initializing data
   
};

【讨论】:

  • 正如给定的,没有理由使用成员变量。 int data[3]{0, 0, 0}; 会产生同样的效果。如果提供了显式构造函数,那么引用其他成员变量可能是有意义的(但我仍然认为它是代码审查中的代码异味)。
  • @Eljay 我同意,但 OP 仍然想知道为什么会发生错误以及如何解决它。我只是提供了一种可能的解决方法。正如您已经提到的,还有其他方法。此外,这不是代码审查。尽管您的评论可能对 OP 未来的用途(程序)有所帮助。
猜你喜欢
  • 2012-11-20
  • 2019-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-24
相关资源
最近更新 更多