看看这个非常基本的 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/