-1
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()。这段代码有什么问题!!!

4

1 回答 1

1

正如已经提到的,您提供的代码有错别字。修复它们后,您将收到您提到的错误。

你得到它的原因是你有一个带有 name 的成员函数Transform,与你想要具体化的类型相同GetComponent。因此,解决方案是通过使用完整的类型名称(包括命名空间)来“帮助”编译器。这假设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>();
    }
};
于 2013-01-25T14:11:16.707 回答