我正在使用地图存储从文本文件解析的数据。实际的代码非常大,虽然如果这还不够,我可以发布它,但是这里有任何导致问题的行的大纲:
#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 ++百万变种,但我不确定,如果是这样,我不知道我应该使用什么或如何解决它
答案 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
类型的参数的函数声明