看看这个非常基本的 C++ 代码:

class Class1 {

};

Class1 c1;

class Class2
{
public:
    Class2(Class1 &c)
    {

    }
};

// Class2 abcd(c1);    // OK outside declaration

class Class3
{
public:
    Class2 abcd(c1); // Declaration of abcd as field -> error: unknown type name 'c1'
};

关于 abcd 声明,我有些不明白:如果我将其声明为全局变量,它就可以工作。但是,如果我将其声明为 Class3 中的字段,则会出现编译器错误。

最佳答案

非静态数据成员 default member initializer(C++11 起)只能与大括号或等号初始值设定项一起使用,而不能与括号初始值设定项一起使用。

这样你就可以

class Class3
{
public:
    Class2 abcd{c1};          // brace initializer
    Class2 abcd = Class2(c1); // equals initializer
};

关于c++ - 声明为类字段而不是全局变量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57782043/

10-11 19:03