在超类

时间:2015-11-18 21:14:34

标签: c++ string inheritance scope

所以我的头文件看起来像这样:

class DerivedClass : public BaseClass{
public:
    const std::string IMG_FILE_NAME = "picture.png";
};

我的cpp文件如下所示:

#include "DerivedClass.h"

DerivedClass::DerivedClass(int x, int y) : BaseClass(x, y, IMG_FILE_NAME){
    //some code here.
}

在基类中,我使用字符串(IMG_FILE_NAME)来打开文件但由于某种原因它在那里为空,这会破坏程序。有人可以解释发生了什么吗?

1 个答案:

答案 0 :(得分:4)

基类将在派生类之前构造。因此,在将IMG_FILE_NAME发送到DerivedClass构造函数之前,BaseClass中的IMG_FILE_NAME不会被实例化。

可能的解决方法是使int div_up(int n, int d) { return n / d + (((n < 0) ^ (d > 0)) && (n % d)); } //i.e. +1 iff (not exact int && positive result) 保持静态。它应该在构造函数被调用之前初始化。