std :: map<,> .emplace()产生错误

时间:2014-05-20 20:46:23

标签: c++ string c++11

我正在使用地图存储从文本文件解析的数据。实际的代码非常大,虽然如果这还不够,我可以发布它,但是这里有任何导致问题的行的大纲:

#include <stdio.h>
#include <iostream>
#include <fstream>
#include <SDL.h>
#include <map>

using namespace std;

bool processTXT(char path[])
{
    ifstream source;
    source.open(path);

    char* key = new char[200];
    char* entry = new char[200];

    ifstream.getline(key, 200);
    ifstream.getline(entry, 200);

    //Not quite the original, but close enough; add lots of processing here

    map<string,string> currentBlock(map<string,string>());

    string keyS(string(key));
    string entryS(string(entry));
    currentBlock.emplace(keyS, entryS); //<----- THIS line seems to be the problem

    //Serialisation (of currentBlock) that I have yet to implement

}

这会导致此编译错误:

error C2664: 'std::pair<const _Kty,_Ty>::pair(const std::pair<const _Kty,_Ty> &)' :
cannot convert argument 1 from 'std::basic_string<char,std::char_traits<char>,std::allocator<char>> '
to 'const std::string &'

我怀疑我在'字符串'主题上使用了错误的C ++百万变种,但我不确定,如果是这样,我不知道我应该使用什么或如何解决它

1 个答案:

答案 0 :(得分:5)

本声明

map<string,string> currentBlock(map<string,string>());

是一个函数声明,它具有返回类型映射和一个函数类型的参数,它们也具有相同的返回类型。

显然这个结构

map<string,string>()

是一个带有抽象声明符的函数声明,作为函数.currentBlock的参数。

简单地写

map<string,string> currentBlock;

同样适用于行

string keyS(string(key));
string entryS(string(entry));

也就是说,它们也是具有namea键参数和std :: string

类型的参数的函数声明