假设这是在Foo.h中:
class Foo {
private:
const int MAXIMUM;
}
如何在Foo.cpp文件中将MAXIMUM初始化为某个值(在这种情况下为100)?我尝试过
Foo::Foo() {
MAXIMUM = 100;
}
,并收到错误消息“表达式必须是可修改的左值”。然后我尝试了
const int Foo::MAXIMUM = 100;
并收到错误“可能无法在其类之外定义非静态数据成员”。这基本上回答了我的问题,“这是不可能的”,但这只是意味着我的大学搞砸了头文件。那么,这有可能吗?
注意:这是大学作业,所以我不能更改头文件。我认为逻辑解决方案是将头文件中的MAXIMUM设置为100。
答案 0 :(得分:3)
您可以通过两种方式初始化const变量
在线初始化
class Foo {
private:
const int MAXIMUM = 100;
};
使用初始化列表
class Foo {
Foo()
: MAXIMUM(100) {
}
Foo(const int MAXIMUM)
: MAXIMUM(MAXIMUM) {
}
private:
const int MAXIMUM;
}
在以下状态enter code here
中
Foo::Foo() {
MAXIMUM = 100;
}
MAXIMUM
已经创建,并且您正在尝试修改其值,const
变量不允许这样做。
在以下声明中
const int Foo::MAXIMUM = 100;
MAXIMUM
不是静态变量,因此它将与对象绑定。您无法使用类名访问MAXIMUM
。
答案 1 :(得分:1)
您需要一个初始化器列表:
Foo::Foo() : MAXIMUM(100)
{
}
答案 2 :(得分:0)
“ Const ”和“ Reference ”变量。就您而言,
Foo::Foo() { // **End of this line, object is getting created.**
MAXIMUM = 100; // *This line, gets Error: "expression must be a modifiable lvalue"*
}
为避免这种情况,必须在类构造函数创建对象之前使用“初始化列表”,其中将值分配给变量。
修复:
Foo::Foo():MAXIMUM(100) { // const variable is initialized
MAXIMUM = 200;
}