有人可以帮我完成这项工作吗?
Donor-enumerate() 不起作用,gcc 给出没有匹配的函数错误。
template < class T >
struct mesh;
template < class T >
struct meshBone
{
friend struct mesh< T >;
private:
T *_obj;
};
template < class T >
struct mesh
{
template < class U >
void enumerate( U& rcv )
{
}
void connect( T* obj, mesh< T >* donor )
{
class object_replacement
{
T* _obj;
public:
object_replacement ( T* t ): _obj(t) {}
bool operator()( meshBone<T> * bone )
{
bone->_obj = _obj;
return true;
}
} obj_rpl(obj);
donor->enumerate (obj_rpl);
}
};
最佳答案
在 C++03 中,您不能使用局部类型作为模板类型参数。
object_replacement
是本地类型(它是 mesh<T>::connect(T*, mesh*)
的本地类型)并且您尝试将其用作模板参数 U
的 mesh<T>::enumerate<U>
. gcc 给出了这个无用的错误消息,即“没有匹配的函数”。
“无本地类型”规则已在 C++0x 中删除,因此如果您有足够新的 gcc 版本,您可以使用 -std=c++0x
进行编译。这应该可以正常工作(我已经用 gcc 4.5.1 验证了这一点)。如果那不是一个选项,您只需要制作 object_replacement
不是本地类型,即提取它并使其成为 mesh<T>
的嵌套类型类模板:
template <class T>
struct mesh
{
template <class U> void enumerate(U& rcv) { }
class object_replacement
{
T* _obj;
public:
object_replacement (T* t) : _obj(t) {}
bool operator()(meshBone<T>* bone)
{
bone->_obj = _obj;
return true;
}
};
void connect(T* obj, mesh<T>* donor)
{
object_replacement obj_rpl(obj);
donor->enumerate(obj_rpl);
}
};
关于c++ - gcc 问题 - 没有匹配的函数调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5974468/