【问题标题】:Not able to add elements to STL map无法将元素添加到 STL 映射
【发布时间】:2018-10-01 21:33:19
【问题描述】:

我正在用 C++ 编写一个文本文件解析器。为此,我必须将“valueToParse”(字符串类型)及其对应的正则表达式(字符串类型)存储在 map 中。我在 .h 文件中定义了地图并将其包含在 main.h 文件中。在构建解决方案时,我观察到如下错误:

错误 C2057:预期的常量表达式 c:\mypractice\hobbyprojects\MyParser\logparser.h

错误 C2466:无法分配常量大小为 0 的数组 c:\mypractice\hobbyprojects\MyParser\logparser.h

错误 C4430:缺少类型说明符 - 假定为 int。注意:C++ 不支持默认整数 c:\mypractice\hobbyprojects\MyParser\logparser.h

错误 C2040: 'ValuesToParse' : 'int []' 与 'std::map<_kty>' c:\mypractice\hobbyprojects\MyParser\logparser.h 的间接级别不同

错误 C2440: 'initializing' : 无法从 'const char [4]' 转换为 'int []' c:\mypractice\hobbyprojects\MyParser\logparser.h

我的 C++ 代码如下:

main.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";

logParser.cpp

#include "logParser.h"

我用谷歌搜索了错误,但没有运气。请不要介意我是 C++ 新手。任何人都可以帮助我理解这一点吗?

【问题讨论】:

    标签: c++ visual-studio-2008 stl stdmap


    【解决方案1】:

    你有两个问题:

    首先是你在头文件中定义一个变量。这意味着它将在包含头文件的每个translation unit 中定义。不过,这不是您当前问题的根源。

    第二个问题,也是导致你的错误的原因,是你在函数之外有一般的语句。在函数之外你只能有声明定义

    这两个问题的答案都在你的教科书中。

    【讨论】:

    • 知道了,谢谢。我来自python背景,所以第二个问题:)
    【解决方案2】:

    你有全局范围的代码,你需要把它放到一个函数中(logparser.cpp),例如:

    void initialize()
    {
      ValuesToParse["FileName"] = "xyz";  
      ValuesToParse["Author"] = "abc";
    }
    

    然后将声明插入到头文件中

    void initialize();
    

    并在main() 函数中调用它

    【讨论】:

      猜你喜欢
      • 2014-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-29
      • 2018-05-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多