【发布时间】:2014-06-08 09:35:35
【问题描述】:
我的容器地图有问题。我需要将我自己的类 Person 存储在 key 中,但出现错误 C2784(即“编译器无法从提供的函数参数中确定模板参数。”)。这是《Ivor Horton's beginning Visual C++ 2010》一书中的例子
#include<map>
#include<string>
#include <iostream>
using namespace std;
void main()
{
class Person{
public:
string c_name,c_surname;
Person(string name,string surname){
c_name=name;
c_surname=surname;
}
};
map<Person,string> phonebook;
phonebook.insert(make_pair(Person("Mel","GIBSON"),"24 32 23"));
phonebook[Person("Mel2","Gibson2")]="243 32 23";
/* it doesn`t work too
typedef pair<Person,string> Entry;
Entry entry1= Entry(Person("Jack","Jones"),"213 567 1234");
phonebook.insert(entry1);*/
system("Pause");
}
错误 1 错误 C2784: 'bool std::operator &,const _Elem *)' : 无法推断出 'const std::basic_string<_elem> &' 来自 'const main::Person' e:\microsoft visual studio 10.0\vc\include\xfunctional 125 1 AllClasses
错误 2 错误 C2784: 'bool std::operator &)' : 无法从 'const 推断出'const _Elem *' 的模板参数main::Person' e:\microsoft visual studio 10.0\vc\include\xfunctional 125 1 AllClasses
错误 3 错误 C2784: 'bool std::operator &,const std::basic_string<_elem> &)' : 无法推断模板来自 'const main::Person' e:\microsoft visual studio 10.0\vc\include\xfunctional 125 1 AllClasses 的 'const std::basic_string<_elem> &' 的参数
错误 4 错误 C2784: 'bool std::operator &,const std::_Tree<_traits> &)' : 无法推断出 'const std::_Tree 的模板参数<_traits> &' from 'const main::Person' e:\microsoft visual studio 10.0\vc\include\xfunctional 125 1 AllClasses
错误 5 错误 C2784: 'bool std::operator &,const std::unique_ptr<_ty2> &)' : 无法推断出 'const 的模板参数std::unique_ptr<_ty> &' from 'const main::Person' e:\microsoft visual studio 10.0\vc\include\xfunctional 125 1 AllClasses
错误 6 错误 C2784: 'bool std::operator &,const std::reverse_iterator<_ranit2> &)' : 无法推导出 'const std::reverse_iterator 的模板参数<_ranit> &' from 'const main::Person' e:\microsoft visual studio 10.0\vc\include\xfunctional 125 1 AllClasses
错误 7 错误 C2784: 'bool std::operator &,const std::_Revranit<_ranit2> &)' : 无法推断出 'const 的模板参数std::_Revranit<_ranit> &' from 'const main::Person' e:\microsoft visual studio 10.0\vc\include\xfunctional 125 1 AllClasses
错误 8 错误 C2784: 'bool std::operator &,const std::pair<_ty1> &)' : 无法推断出 'const 的模板参数std::pair<_ty1> &' from 'const main::Person' e:\microsoft visual studio 10.0\vc\include\xfunctional 125 1 AllClasses
错误 9 错误 C2676: 二进制 '
【问题讨论】:
-
对于我们这些不知道“错误 C2784”是什么的人,请将完整且未经编辑的错误日志复制到您的问题中。事实上,当询问有关任何编译器或链接器错误的问题时,请始终这样做。
-
部分错误是由于这个(模板中使用的本地类型):stackoverflow.com/questions/5751977/… 通过将
Person的定义移到 main 之外来修复它。