使用构造函数创建对象时出错

时间:2016-10-10 15:43:25

标签: c++ c++11 visual-c++

使用此代码时遇到错误:

class Box {
public:
    Box (int);
};

Box::Box (int a) {
    //sample code   
}

int main() {
    class Anything {
        Box box (5); // error: expected identifier before numberic constant
                     // error: expected ',' or '...' before numeric constant
    };
}

错误出现在我在Anything类下填写的五个错误中。 如果我写的话,问题就会消失。

Box box (5);

没有围绕它的任何课程。

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:4)

Anything内,

Box box(5);

对于声明成员变量并初始化它无效。

您可以使用:

class Anything {
    Box box;
    public:
       Anything : box(5) {}
};

class Anything {
    Box box = Box(5);
};

class Anything {
    Box box{5};
};

答案 1 :(得分:0)

原因是因为box在这里:

 class Anything {
    Box box (5);
 };

不是一个对象,它是该类的成员。您需要在构造函数(see here)中初始化它。如果您希望能够创建box,则需要执行以下操作:

 class Anything {
        Box box;
    public:
        Anything() : box(5) {}
 };

然后你可以创建一个任何对象:

Anything anything;

它将包含一个{5}初始化的Box对象box

当然所有这一切都毫无意义,因为你实际上无法对Anything做任何事情。它没有其他数据成员或功能......