每当我定义一个变量并在一个类中同时给它一个值时,我就会收到一个错误。这是什么原因?
如您所见,这不起作用......
class myClass {
private:
int x = 4; // error
};
但是当我保持变量undefined时它会:
class myClass {
private:
int x;
};
答案 0 :(得分:11)
由于没有其他人使用成员初始化,我将向您介绍:
class myClass {
private:
int x;
public:
myClass() : x (4){}
};
最好在构造函数的主体中使用它来分配,因为在正文开始时,无论你是否这样说,所有用户定义的成员都已经被初始化了。最好这样做一次并实际初始化非用户定义的成员, 是唯一适用于非静态const
成员和参考成员的方法。
例如,以下操作无效,因为x
未在正文中初始化,而是被分配到:
class myClass {
private:
const int x;
public:
myClass() {x = 4;}
};
然而,使用成员初始化程序,因为你正在初始化它:
class myClass {
private:
const int x;
public:
myClass() : x (4){}
};
另请注意,您的int x = 4;
语法为perfectly valid in C++11,它可用于任何所需的初始化,因此如果您开始使用它,您将受益。
答案 1 :(得分:2)
在构造函数中初始化变量。
class myClass {
private:
int x;
public:
myClass()
{
x = 4; // hope that it will work
}
};
更新答案: 根据{{3}},最好使用成员初始化
class myClass {
private:
const int x;
public:
myClass() : x (4){}
};
答案 2 :(得分:0)
实例变量应该使用setter方法定义,IE:setX(input)
或构造函数内部。
答案 3 :(得分:0)
你的课程就像蓝图。它没有任何与之关联的存储空间。当您实例化类的对象时,这类似于基于该蓝图的构建。您的对象具有存储空间,可以保存您为成员变量赋予的值。
另外,正如其他人所指出的,可以在C ++ 11中做你想做的事。查看: http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2008/n2756.htm
答案 4 :(得分:0)
在C ++ 03中,
只能在a中初始化静态const积分数据成员 类。
在构造函数中初始化,或者创建数据成员static const
:
class myClass {
private:
int x;
public:
myClass() {
x = 4;
}
};
或
class myClass {
private:
static const int x = 4;
};
答案 5 :(得分:0)
这样做了:
class myClass
{
private:
static const int x = 4;
};
如果x
不是静态或常量,请仅使用int x;
,并在类的构造函数中初始化x
。