在c++中将map传递给模板函数时出错
Error passing map to template function in C++
我一直在碰壁,决定提交,只是发布我的错误。
我有一个模板(如下所示),它传递了一个std::map,它位于一个命名空间内。
我的问题发生时,试图调用函数模板。我得到下面的错误:
error: no matching function for call to
'getValuePointer(Muon*&, std::map<int, MET*, std::less<int>,
std::allocator<std::pair<const int, MET*> > >*&)'
我做错了什么?
模板代码如下:
#ifndef OBJECTMAPMATCH_H
#define OBJECTMAPMATCH_H
#include <map>
#include <utility>
#include <typeinfo>
#include <iostream>
#include <stdlib.h>
using namespace std;
namespace ObjectMapMatch {
template< class A, class B, class C >
C getValuePointer( A &x , map< B,C> &y )
{
if( y.find(x.Index()) != y.end() ){
return y.find(x.Index()).second;
}else{
cout << "ERROR:ObjectMapMatch::getValuePointer:Can not Find "
<< typeid(y).name() << " FOR " << typeid(x).name() << endl;
exit(1);
}
}
}
#endif
下面是调用模板函数
的示例C = ObjectMapMatch::getValuePointer<ClassC*, int, ClassD*>(A, B);
地点:
C is ClassC*
A is ClassC*
B is std::map<int,ClassD*>*
我做错了什么?
根据错误消息,您传递了一个指向map的指针作为第二个形参,而函数期望的是对map的引用。
你可以看到这个,因为*
在这里末尾:
no matching function for call to
'getValuePointer(Muon*&, std::map<...>*&)'
^
一旦你修复了这个问题,将会有额外的问题:由于x
是ClassC*
类型,调用x.Index()
会给出一个错误。也许第一个模板参数应该是ClassC
而不是ClassC*
。
你的模板定义说:
C getValuePointer( A &x , map< B,C> &y )
你正在调用这个函数:
ObjectMapMatch::getValuePointer<ClassC*, int, ClassD*>(A, B);
…B是:
std::map<int,ClassD*>
所以,对于你的模板B是int,而C是ClassD*…这就是为什么没有匹配。
或者不是,我的意思是,您为值选择的名称与模板中的类相同,这非常令人困惑。
你的签名错了
template< class A, class B, class C >
C* getValuePointer( A* x , map<B, C*> &y )
{
if( y.find(x->Index()) != y.end() ){
return y.find(x->Index()).second;
}else{
cout << "ERROR:ObjectMapMatch::getValuePointer:Can not Find "
<< typeid(y).name() << " FOR " << typeid(x).name() << endl;
exit(1);
}
}
和
ObjectMapMatch::getValuePointer<ClassC, int, ClassD>(A, B);
但是C是类d *,而不是类C*,对吗?
你在上次编辑中说
B is std::map<int,ClassD*>*
但是你的功能是
template< class A, class B, class C >
C getValuePointer( A &x , map< B,C> &y )
因此接受
std::map<int,ClassD*> &
表示第二个参数。指向map的指针和指向map的引用。我想你应该要么传递*B
,要么B
不应该是指针(STL在那里,所以你不需要使用指针,所以尽量避免它们)。
相关文章:
- 类中私有结构的构造函数出错
- 字符串验证函数出错
- 我的类默认构造函数出错
- Dev-C++和Code::Blocks中的析构函数出错
- int对的哈希函数出错
- MSVC 编译器错误导致迭代器和友元函数出错
- 复制构造函数出错
- 使用 WinSock2 开发,使用 CreateThread() 函数出错
- 链接列表的Push_back函数出错
- 结构初始化中的隐式复制构造函数出错
- 异步函数出错
- 编译器错误消息错误:令牌之前的预期')' '*'。我的构造函数出错
- c++中使用std::bind和std::函数出错
- 在vector排序中使用c++模板函数出错
- 使用std::for_each lambda函数出错
- 二叉搜索树插入函数出错
- 调用类的函数出错
- c++使用删除函数出错
- 使用已删除的函数出错
- 调用构造函数出错