c++ - c++字符串全局变量不能正常赋值
问题描述
我有一个这样的 global.h :
#include <string>
extern std::string logPath;
extern std::string logFormat;
extern int maxKeepDays;
class Initializer
{
public:
Initializer()
{
std::cout << "Initializer constructor niftyCounter=" << niftyCounter << " logPath=" << logPath << " maxKeepDays=" << maxKeepDays << " logFormat=" << logFormat << std::endl;
if (niftyCounter++ == 0)
init();
}
~Initializer()
{
std::cout << "Initializer destructor" << std::endl;
if (--niftyCounter == 0)
clean();
}
private:
void init();
void clean();
static int niftyCounter;
};
static Initializer s_initializer;
和 global.cpp 像这样:
#include "global.h"
int Initializer::niftyCounter = 0;
int maxKeepDays = 30;
std::string logPath("default logPath");
std::string logFormat("default logFormat");
void Initializer::init()
{
std::cout << "Initializer init() " << "logPath=" << logPath << " maxKeepDays=" << maxKeepDay << " logFormat=" << logFormat << std::endl;
}
void Initializer::clean()
{
std::cout << "Initializer clean()" << std::endl;
}
然后我在 main.cpp 中使用 global.xxx,如下所示:
#include "global.h"
int main(int argc, char *argv[])
{
// do something
}
我得到这样的输出:
Initializer constructor niftyCounter=0 logPath= maxKeepDays=30 logFormat=
Initializer init() logPath= maxKeepDays=30 logFormat=
Initializer destructor
Initializer clean()
发现整型全局变量(如maxKeepDays)可以正常赋值,但字符串变量(logPath和logFormat)为空。我不知道为什么会这样。
解决方案
推荐阅读
- java - CXF 中的响应超时属性
- python - 在 pandas 数据框列中的元组中拆分字符串
- python - 如何像 Python numpy.fft.rfft 一样在 cv::dft 中指定 FFT 长度
- google-app-engine - 我应该在 robots.txt 中输入登录后页面吗
- java - 为什么Java中未初始化数组上的'For each'不循环
- c# - 如何使用嵌入的 css、图像和 javascript 打印 html 内容?
- c# - WPF MVVM 切换按钮在运行时启用/禁用
- laravel - 在 null 错误时调用成员函数 getClientOriginalName()
- scala - 如何在火花中连续获得相同的数据帧
- c++ - (CGAL) 获取AABB树生成的bounding cube进行碰撞检测