初始化header-file中的成员变量

时间:2014-04-20 12:03:06

标签: c++ initialization header-files

当我在header-file

中初始化以下成员变量时,我收到编译警告
private:
  const std::string FILENAME = "prices.txt";
  double *temp = new double[SIZE];

警告:非静态数据成员初始值设定项仅适用于-std = c ++ 11或std = gnu ++ 11

我如何才能最好地解决这个问题?我应该只在头文件中声明变量,然后在构造函数中初始化它们吗?

2 个答案:

答案 0 :(得分:9)

编译器建议一种解决方案:向编译器添加-std=c++11标志以启用此C ++ 11功能。这将增加许多其他功能,使C ++编程更加愉快。

如果您不能选择切换到C ++ 11,请在构造函数中使用初始化列表:

MyClass() : FILENAME("prices.txt"), temp(new double[SIZE]) {}

注意:由于在动态内存区域中创建了temp,因此需要添加析构函数,复制构造函数和赋值运算符。你最好使用动态容器,例如std::vector用于您的数据,因为它简化了您的内存管理代码。

答案 1 :(得分:1)

  

我如何才能最好地解决这个问题?我应该只在头文件中声明变量,然后在构造函数中初始化它们吗?

是的!由于const std::string您需要成员初始化列表:

 MyClass::MyClass() 
 : FILENAME("prices.txt")
 , temp(new double[SIZE]) {
 }