Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/139.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ gcc问题-没有匹配的函数调用_C++_Gcc - Fatal编程技术网

C++ 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

有人能帮我做这件事吗

捐赠者-枚举()不起作用,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);
    }
};
模板
结构网格;
模板
网状结构
{
友元结构网格;
私人:
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