符号';T';未在模板关键字后的行上解析 我对C++很陌生,但知道大多数主流编程语言。我在网上寻找解决问题的方法,但似乎找不到。以下是我到目前为止的一些代码:

符号';T';未在模板关键字后的行上解析 我对C++很陌生,但知道大多数主流编程语言。我在网上寻找解决问题的方法,但似乎找不到。以下是我到目前为止的一些代码:,c++,C++,目标h: class Object final { public: template <Component T> const Component& AddComponent<T>(); }; class Object { public: template <typename Component, Component T> const Component &AddComponent() {

目标h:

class Object final {
public:
    template <Component T>
    const Component& AddComponent<T>();
};
class Object {
public:
    template <typename Component, Component T>
        const Component &AddComponent() {
            // adding component and return statement here.
        }
};
类对象最终版本{
公众:
模板
const Component&AddComponent();
};
object.cpp:

#include "object.h"

template <Component T>
const Component& Object::AddComponent<T>() {

}
#包括“object.h”
模板
常量组件和对象::AddComponent(){
}

问题是在模板关键字后面的行上没有解析符号“T”。我在Linux上使用Eclipse和G++编译器。首先,在C++中,最后一个关键字意味着一个虚拟类方法不会被子类重载,这不是你使用它的方式。因此,该关键字应消失。
然后,C++中不存在“组件”。您使用它的方式使我认为它是一个typename,因为您返回的是类型为“Component”的元素。您应该首先定义它,或者,如果它应该是一个因函数的不同调用而不同的类型名,那么它应该是一个模板参数。
您也不应该在函数声明中写入“”,因为它没有意义。
最后但并非最不重要的一点是,函数模板的定义应在头文件中指定,因为它是实例化所必需的。
因此,正确的语法应该是:
目标h:

class Object {
public:
    template <typename Component, Component T>
        const Component &AddComponent() {
            // adding component and return statement here.
        }
};
类对象{
公众:
模板
const Component&AddComponent(){
//在这里添加组件和返回语句。
}
};
示例main.cpp:

#include "object.h"

int main() {
    Object obj;
    obj.AddComponent<int, 4>();
    return 0;
}
#包括“object.h”
int main(){
对象对象对象;
obj.AddComponent();
返回0;
}
对象.h(如果预定义了“组件”):

类对象{
公众:
模板
const Component&AddComponent(){
//在这里添加组件和返回语句。
}
};
main.cpp(如果预定义了“组件”):

#包括“object.h”
int main(){
对象对象对象;
obj.AddComponent();
返回0;
}
祝你今天愉快。

PS:如果我犯了任何英语错误,我是法国人,对不起。

您的课堂声明符合要求吗?(书签,它是最好的C++参考站点之一)。模板的声明和实现必须在页眉中完成。实际的错误信息是什么?<代码>模板>代码>无效,而<代码> <代码>不应该在下一行。@ EyLLANESC:这不是严格的“必须”。但这是任何新手都应该做的。
#include "object.h"

int main() {
  Object obj;
  obj.AddComponent<4>();
  return 0;
}