我正在尝试使用静态方法创建一个简单的日志记录类,但是当我尝试记录一些const char*
变量并想知道原因时,我会遇到麻烦。它说Error: expression must have integral or unscoped enum type
。我在stackoverflow和谷歌寻找它,但不知何故它不能帮我把它弄好。
记录方法如下:
void Logger::log(const char* message){
#ifdef _DEBUG
std::cout<< "[INFO]" << message << std::endl;
#endif
}
void Logger::err(const char* message){
#ifdef _DEBUG
std::cout << "[ERROR]" << message << std::endl;
#endif
}
我想在这里打电话给他们:
char* Config::getConfigValue(const char* name){
if (m_doc.first_node())
{
xml_node<>* node = m_doc.first_node()->first_node(name);
if (node)
{
Logger::log("Getting value: " + name + ": "+ node->value());
return node->value();
}
}
Logger::log("Getting value: " + name + " FAILED!");
return 0;
}
我对这种简单的记录器的想法完全错了吗?
我应该在我记录的每一点#ifdef
这样做吗?或者我可以这样做吗?
对于解决这个问题的任何提示,并帮助我找到一个“好”的记录器,我会很高兴。
答案 0 :(得分:3)
问题与您的日志记录无关。您无法使用C
连接+
字符串。
"Getting value: " + name // Not going to work.
如果您仍然在c++
,我会尽可能坚持std::string
,因为支持+
进行连接。
答案 1 :(得分:1)
char *
或char const *
是指针类型,而不是类或结构,因此不支持使用+
运算符进行连接。
您正在使用C ++,因此请使用C ++处理字符串的方式:将const char *
替换为const std::string &
。
答案 2 :(得分:1)
表达式
“获得价值:”+名称+“失败!”
其中name为const char* name
是一个错误,因为全局命名空间中没有operator + const char*
。您必须使用strcat
,strcpy
等
在C ++中,你应该使用非常灵活的std::string
(即动态调整大小):
char* Config::getConfigValue( std::string name){
//...
Logger::log("Getting value: " + name + ": "+ node->value());
}