c++ - gcc 问题 - 没有匹配的函数调用

标签 c++ gcc

有人可以帮我完成这项工作吗?

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*) 的本地类型)并且您尝试将其用作模板参数 Umesh<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/

相关文章:

assembly - GNU 汇编器 .long 声明归零

c - C 中的 OpenMP 在 Windows 中使用 GCC 创建 DLL

c++ - 为什么缓冲区末尾和保存的帧指针之间有 8 个字节?

c++ - 使用 2 个参数复制构造函数

c++ - fftwf_execute_dft_c2r 写入输入缓冲区

c++ - 错误 'a.out' : free(): invalid next size (normal)

gcc - Fedora 21 有 clang,没有 gcc

c++ - 为什么对象复制要构造和销毁两次?

c++ - libstdc++.so.6 : cannot open shared object file: No such file or directory

c++ - 使用另一个参数的默认参数