我正在用C++编写一个文本文件解析器。为此,我必须在map中存储"valueToParse"(字符串类型)及其相应的正则表达式(字符串类型)。我已经在 .h 文件中定义了地图并将其包含在 main 中。在构建解决方案时,我观察到错误如下:
错误 C2057:预期的常量表达式 c:\mypractice\hobbyprojects\MyParser\logparser.h
错误 C2466:无法分配常量大小为 0 的数组 c:\mypractice\hobbyprojects\MyParser\logparser.h
错误 C4430:缺少类型说明符 - 假定为 int。注意:C++不支持 default-int c:\mypractice\hobbyprojects\MyParser\logparser.h
错误 C2040: 'ValuesToParse' : 'int []' 的间接级别与 'std::map<_Kty,_Ty>' 不同 c:\mypractice\hobbyprojects\MyParser\logparser.h
错误 C2440:"正在初始化":无法从"常量字符 [4]"转换为"int []" c:\mypractice\hobbyprojects\MyParser\logparser.h
我的C++代码如下:
主.cpp
#include <iostream>
#include <regex>
#include "logParser.h"
int main()
{
return 0;
}
logParser.h:
#pragma once
#include <string>
#include <map>
std::map<std::string, std::string> ValuesToParse;
ValuesToParse["FileName"] = "xyz";
ValuesToParse["Author"] = "abc";
日志解析器.cpp
#include "logParser.h"
我用谷歌搜索了错误,但没有运气。请不要介意我是C++新手。谁能帮我理解这一点?
您有两个问题:
首先是在头文件中定义一个变量。这意味着它将在包含头文件的每个翻译单元中定义。不过,这不是您当前问题的根源。
第二个问题,也是导致你错误的原因,是你在函数之外有一般的语句。在函数之外,您只能有声明和定义。
这两个问题的答案都会在你的教科书中。
你在全局范围内有代码,你需要把它放到一个函数(logparser.cpp),例如:
void initialize()
{
ValuesToParse["FileName"] = "xyz";
ValuesToParse["Author"] = "abc";
}
然后将声明插入到头文件中
void initialize();
并在main()
函数中调用它