编译时指针“没有类型”?

时间:2013-09-24 22:27:48

标签: c++ arrays pointers memory dynamic

这是我的代码。

struct player
   {
   char* name;
   int* id;
   id = new int[5];
   };

当我编译时,它表示“错误:'id'没有命名类型”,指向指针被分配空间为5个整数的行。

不要问我为什么需要一个整数数组;这是一个课程项目,是必需的(我们的老师喜欢让我们做不必要的事情来给我们练习)。

3 个答案:

答案 0 :(得分:3)

您是如何提出此代码的?您希望它能做什么?

这一行

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]) 
    {}
  ...
};

(当然,正确实施这样的课程需要遵循三法则。)

或者您可以从外部初始化它。这里的正确方法取决于你的意图。

答案 1 :(得分:2)

试试这个:

struct player
   {
   char *name;
   int id[5];
   };

答案 2 :(得分:1)

您无法在struct中键入代码行。 您只定义变量。 struct期望您正在定义一个新变量。因此,错误说id不是像int和char这样的类型定义。

如果你坚持使用指针,你可以从结构中进行初始化。

a.id = new int[5];

里面像其他答案一样:

struct player
{
   char *name;
   int id[5];
};