使用MSVC ++ 6.0制作这个简单的类
class Strg
{
public:
Strg(int max);
private:
int _max;
};
Strg::Strg(int max)
{
_max=max;
}
如果我在以下地方使用它听起来不错:
main()
{
Strg mvar(10);
}
但是现在如果我在另一个班级使用它:
class ok
{
public:
Strg v(45);
};
我收到邮件错误: 错误C2059:语法错误:'常数'
你能告诉我更多吗?
答案 0 :(得分:7)
应该是:
class ok
{
public:
Strg v;
ok() : v(45) {}
};
应使用initialization lists初始化没有默认构造函数(在本例中为v)的非静态成员变量。另一方面,在函数(如main)中,您可以使用常规构造函数语法。
答案 1 :(得分:4)
编译器抱怨的是,您正在尝试提供有关如何在类定义中实例化类成员v
的说明,这是不允许的。
实例化v
的位置将在构造函数内部或构造函数的初始化列表中。例如:
内部构造函数:
class ok
{
public:
Strg v;
ok() {
v = Strg(45);
}
};
在初始化列表中:
class ok
{
public:
Strg v;
ok() : v(45) {}
};
执行此操作的正确方法是最后一个(否则,v
还需要一个默认构造函数,并且会初始化两次)。