问题描述
我必须将 C++98 用于我正在开发的应用程序。
我想根据是否第一次调用构造函数来控制构造函数的行为。 对于第一次构造函数调用,我想执行一些额外的代码,但它不能在连续调用中执行。 为此,我决定使用一个默认值为 false 的静态 bool,在第一次构造函数调用后,它会在其他所有调用中都设置为 true。
class data_sender {
private:
static bool library_initialized;
public: // etc.
};
这是保密的,因为我不希望这个类的使用者直接操作它。 它不是 const,因为显然我想在构造函数中更改它。
现在我不能为此分配默认值,它说 c++ 禁止这种非常量静态变量初始化。
我认为我的方法在这里是错误的,我应该使用其他方法。 我对 C++ 比较陌生,所以即使你给我指出一些文章或告诉我要搜索什么。
我注意到的另一个奇怪的事情是,当我在 .h 文件中将 library_initialized 定义为 false 时,
class data_sender { .... };
bool data_sender::library_initialized = false;
但是如果我在 data_sender.cpp 中定义它,它允许我这样做,并且编译没有错误。
data_sender::data_sender() { ... } //constructor deFinition
bool data_sender::library_initialized = false; // This is inside data_sender.cpp
这个应用程序是为 mips 和 ipq 架构而开发的,如果重要的话,将使用 gcc 4.8 (openwrt-mips) 和 gcc 5.2 (openwrt-arm) 编译。
我在 stackoverflow 上找到了一个与我类似的答案,为什么我只需要在实现文件 (.cpp) 中而不是在标题 (.h) 中指定它。
Static constant string (class member)
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)