class Node {
public:
template<class T> T* GetComponent() {
return new T(this); // actual code is more complicated!
}
Transform* Transform() {
return this->GetComponent<Transform>(); // invalid template argument for 'T', type expected
}
};
但是调用同样的方法可以从另一个地方运行!喜欢main()。 这段代码有什么问题!!!
答案 0 :(得分:1)
您提供的代码存在拼写错误,正如已经提到过的那样。修复它们后,您将收到您提到的错误。
你得到它的原因是你有一个名为Transform
的成员函数,与你要为GetComponent
建议的类型相同。所以,解决方案是帮助&#34; complier使用完整类型名称,包括名称空间。这假定Transform
在全局命名空间中定义:
Transform* Transform() {
return this->GetComponent<::Transform>();
}
如果您已在命名空间中定义它,请使用此选项:
Transform* Transform() {
return this->GetComponent<::YOUR_NAMESPACE::Transform>();
}
编辑:我使用的完整代码:
class Node;
class Transform
{
public:
Transform(Node*);
};
class Node {
public:
template <class T>
T* GetComponent() {
return new T(this);
}
Transform* Transform() {
return this->GetComponent<::Transform>();
}
};