无法将元素添加到 STL 映射



我正在用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()函数中调用它

相关内容

  • 没有找到相关文章

最新更新