在类中使用结构时出错

Bus*_*ess -8 c++ struct class

我是C++,IDE是Visual Studio 2012.我不知道为什么我不能这样做,根本没有任何意义.正如标题所说,我正在尝试将一个结构放在一个类中,但它根本不会让我这样做.我已经尝试将它放在公共,私有,受保护,然后尝试将其置于全球范围内,并且没有任何作用.

class foobar
{
public:
    struct foo
    {
        int ass;
    };

    foo bar;
    bar.ass = 1; //getting a weird error on this line
};
Run Code Online (Sandbox Code Playgroud)

我如何在类中放置结构?谢谢你的帮助

And*_*owl 9

如果你想要做的是在构造类型的对象时ass初始化成员,那么在C++ 11中你可以这样做:1foo

class foobar
{
public:

    struct foo
    {
        int ass = 1;
    //          ^^^
    };

    foo bar;
};
Run Code Online (Sandbox Code Playgroud)

你可以在这里看到一个实例.

上面的语法等同于更详细的基于构造函数的初始化,这是C++ 03中唯一的选项 (也可能是VS2012附带的VC11编译器版本,因为VS2012 不完全符合C++ 11标准):

class foobar
{
public:

    struct foo
    {
        foo() : ass(1) { }
    //        ^^^^^^^^

        int ass;
    };

    foo bar;
};
Run Code Online (Sandbox Code Playgroud)


Cod*_*ice 5

C++不允许在类声明中初始化变量.您必须编写构造函数来执行此操作.

  • 有几个原因,所有这些都有意义,并且超出了这个评论主题的范围.有趣的故事:语言设计师比你聪明. (2认同)