在类外设置const int成员变量(C ++)

时间:2018-10-06 19:43:20

标签: c++ class oop

假设这是在Foo.h中:

class Foo {
    private:
        const int MAXIMUM;
}

如何在Foo.cpp文件中将MAXIMUM初始化为某个值(在这种情况下为100)?我尝试过

Foo::Foo() {
    MAXIMUM = 100;
}

,并收到错误消息“表达式必须是可修改的左值”。然后我尝试了

const int Foo::MAXIMUM = 100;

并收到错误“可能无法在其类之外定义非静态数据成员”。这基本上回答了我的问题,“这是不可能的”,但这只是意味着我的大学搞砸了头文件。那么,这有可能吗?

注意:这是大学作业,所以我不能更改头文件。我认为逻辑解决方案是将头文件中的MAXIMUM设置为100。

3 个答案:

答案 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;    
     }