这是我的代码。
struct player
{
char* name;
int* id;
id = new int[5];
};
当我编译时,它说“错误:'id'没有命名类型”,指向指针被分配5个整数空间的行。
不要问我为什么需要一个整数数组;这是一个课堂项目并且是必需的(我们的老师喜欢让我们做不必要的事情来给我们练习)。
你是怎么想出这段代码的,你期望它做什么?
这条线
id = new int[5];
看起来像一个表达式语句。这个语句在类定义中做了什么?表达式语句属于函数内部,不属于其他任何地方。您不允许将它们注入到类定义中。他们不属于那里。这就是编译器通过该错误消息告诉您的内容:它期望下一个成员声明的类型名称,相反,它看到的内容以开头id
并且在该上下文中通常没有意义。
如果您尝试使用内联初始化程序,则正确的语法是
struct player
{
char* name;
int* id = new int[5];
};
初始化器必须是声明的一部分,如上所示。您不能只是将其拆分为单独的语句,将其填充到类定义中并期望编译器弄清楚您的意思。
否则(即,如果您没有尝试使用内联初始化程序),您必须player::id
在构造函数中初始化
struct player
{
char* name;
int* id;
player(): id(new int[5])
{}
...
};
(当然,此类的正确实现需要遵循三法则。)
或者你可以从外部初始化它。什么是正确的方法取决于您的意图。
尝试这个:
struct player
{
char *name;
int id[5];
};
您不能在 struct 中键入代码行。您只定义变量。struct 期望您正在定义一个新变量。因此,错误表明 id 不是像 int 和 char 这样的类型定义。
如果您坚持使用指针,则可以在结构之外进行此初始化。
a.id = new int[5];
或者
里面像另一个答案:
struct player
{
char *name;
int id[5];
};