gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:58:37 25 4
gpt4 key购买 nike

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

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com