我正在尝试熟悉STL库,但我无法理解编译错误。我已经搜索了其他使用编译器错误字符串“could not deduce template argument for…”的问题,但没有一个答案是适用或相关的。
以下是错误信息: Error 4 error C2784: 'bool std::operator <(const std::unique_ptr<_Ty,_Dx> &,const std::unique_ptr<_Ty2,_Dx2> &)' : could not deduce template argument for 'const std::unique_ptr<_Ty,_Dx> &' from 'const std::string' c:\program files (x86)\microsoft visual studio 10.0\vc\include\xfunctional 125
我正在编写一个简单的解释器来计算一元函数的导数/积分。我想要一个映射表将用户输入与内部控制代码匹配。键是三角函数(或其他函数),而int是控制代码。我使用一个单独的头文件来#define函数,但是对于这个例子,我只是使用整数字面量。我正在使用Visual Studio。
我意识到了错误并尝试了这个方法:
尽管这可能不是最佳选择,但它说明了在将对对象插入映射之前没有构造对对象的问题。
以下是错误信息: Error 4 error C2784: 'bool std::operator <(const std::unique_ptr<_Ty,_Dx> &,const std::unique_ptr<_Ty2,_Dx2> &)' : could not deduce template argument for 'const std::unique_ptr<_Ty,_Dx> &' from 'const std::string' c:\program files (x86)\microsoft visual studio 10.0\vc\include\xfunctional 125
我正在编写一个简单的解释器来计算一元函数的导数/积分。我想要一个映射表将用户输入与内部控制代码匹配。键是三角函数(或其他函数),而int是控制代码。我使用一个单独的头文件来#define函数,但是对于这个例子,我只是使用整数字面量。我正在使用Visual Studio。
#include <cstdio>
#include <map>
using namespace std;
int main(int argc, char** argv) {
map< string, int > functions;
functions.insert( pair<string, int>("sin", 1) );
return 0;
}
编辑:
尝试了Serge的(可行的)答案后:
functions.insert(std::make_pair(std::string("sin"), 1));
我意识到了错误并尝试了这个方法:
pair<string, int> temp = pair<string,int>("cos",2);
functions.insert(temp);
尽管这可能不是最佳选择,但它说明了在将对对象插入映射之前没有构造对对象的问题。
std::map<X,Y>::value_type
就是std::pair<*const* X, Y>
。 - JoeGfunctions["sin"] = 1;
也可以完美地工作 :-) - Martin Kristiansentemp
,那不是错误,而且您也不需要调用make_pair
- 尽管它有一个不需要显式指定类型的优点 -pair
构造函数也可以工作。实际上,我会投票支持@MartinKristiansen的解决方案,因为它既简短又易读。 - Christian Ammer