C++ gcc问题-没有匹配的函数调用
有人能帮我做这件事吗 捐赠者-枚举()不起作用,gcc未给出匹配函数错误C++ gcc问题-没有匹配的函数调用,c++,gcc,C++,Gcc,有人能帮我做这件事吗 捐赠者-枚举()不起作用,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
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);
}
};
模板
结构网格;
模板
网状结构
{
友元结构网格;
私人:
T*_obj;
};
模板
结构网格
{
模板
无效枚举(U&rcv)
{
}
空心连接(T*obj,网格*施主)
{
类对象替换
{
T*_obj;
公众:
对象替换(T*T):\u对象(T){
布尔运算符()(网格骨骼*骨骼)
{
骨->_obj=_obj;
返回true;
}
}obj_rpl(obj);
捐赠者->枚举(obj_rpl);
}
};
在C++03中,不能将本地类型用作模板类型参数
object\U replacement
是一种本地类型(它是mesh::connect(T*,mesh*)
的本地类型),您可以尝试将其用作mesh::enumerate
的模板参数U
。gcc给出了一条毫无帮助的错误消息,即“没有匹配函数”
C++0x中的“无本地类型”规则已被删除,因此,如果您有足够新的gcc版本,您可以使用-std=C++0x
进行编译,这应该可以正常工作(我已经用gcc 4.5.1验证了这一点)。如果这不是一个选项,您只需要将object\u replacement
设置为非本地类型,即提取它并将其设置为mesh
类模板的嵌套类型:
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);
}
};
模板
结构网格
{
模板无效枚举(U&rcv){}
类对象替换
{
T*_obj;
公众:
对象替换(T*T):\u对象(T){
布尔运算符()(网格骨骼*骨骼)
{
骨->_obj=_obj;
返回true;
}
};
空心连接(T*obj,网格*施主)
{
对象替换obj_rpl(obj);
捐赠者->枚举(obj_rpl);
}
};
Ok,那么我应该如何修改这段代码,我可以使用什么解决方法?我必须使用GCC4.0.1,所以我没有c++0x