2015-10-14 57 views
-2

我想要有一个int与我的类相关联,该类在此类的用户实例化时设置。无法初始化私有常量成员

class MyClass { 
public: 
    MyClass(int x); 
private: 
    const int x; 
}; 

要初始化该常数,我尝试使用构造器(Java的风格):

MyClass::MyClass(int x) { 
    this->x = x; 
} 

然而,我的编译器并不很喜欢这种方式,我得到如下:

const.cxx: In constructor ‘MyClass::MyClass(int)’: 
const.cxx:3:1: error: uninitialized const member in ‘const int’ [-fpermissive] 
MyClass::MyClass(int x) { 
^ 
In file included from const.cxx:1:0: 
const.h:8:13: note: ‘const int MyClass::x’ should be initialized 
    const int x; 
      ^
const.cxx:4:11: error: assignment of read-only member ‘MyClass::x’ 
    this->x = x; 
     ^

什么是基于构造函数a Java初始化实例化常量的C++方法?

编辑:我看到标记为重复的问题;那个线程没有提到你可以在构造器列表中使用构造函数的参数,因为它只在所有例子中使用数字文字。

+1

使用的[初始化器列表(http://en.cppreference.com/w/cpp/language/initializer_list): 'MyClass :: MyClass(int x):x(x){}' – Biffen

+3

并且顺便说一下,对于非const成员也使用它... –

+0

使用_initialization_,而不是赋值。 – emlai

回答

3

可以使用什么所谓的构造函数的函数签名的初始化列表:

MyClass::MyClass(int x) : x(x) { 
}