我有一个构造函数接收整数的类:
class One
{
public:
One(int i)
{
foo(i);
}
void foo(int i)
{
// Do something with i
}
};
以上编辑很好。
我有第二个类,其成员类型为One。编译这会导致我传递int的错误(错误是“期望的类型说明符”):
class Two
{
public:
One x(1);
};
但是,如果它是一个指针,我可以初始化该成员:
class Three
{
public:
One *x = new One(1);
};
我可以在不使用指针的情况下初始化类吗?
谢谢!
答案 0 :(得分:4)
使用:
class Two
{
public:
One x(1);
};
并且基于语言规则,编译器尝试将x
解析为返回类型为One
的对象的成员函数,而不是看到有效的参数声明至少需要一个0或更多类型说明符的列表,它会看到非类型。
class Three { public: One *x = new One(1); };
我可以在不使用指针的情况下初始化类吗?
是的,使用value-initialization的 uniform-brace-initialization 语法:
class Three
{
public:
One x{1};
};
class Three
{
public:
One x = 1; //Uses converting constructor,
//see http://en.cppreference.com/w/cpp/language/converting_constructor
//or
One x = One(your, multiple, arguments, here);
};
或构造函数中的member-initializer-lists:
class Three
{
public:
Three(...) : x(1) { ... }
One x;
...
};
答案 1 :(得分:4)
One x(1);
被解析为函数声明,这就是它期望括号中的类型的原因。你可以使用
One x = 1;
或
One x{1};
代替。