我知道类似的问题已经被问过,但我看过一些这些的,但仍没有看到我要去哪里错了。 当我只是写我的课,而不会从定义中分离的雏形,一切工作正常。 当我单独原型和定义如下所示的问题发生:
template<class T> class VisitedSet {
public:
VisitedSet();
int getSize();
void addSolution(const T& soln);
void evaluate();
private:
vector<T> vec;
int iteration;
};
而作为一个定义,让我这个错误的例子:
int VisitedSet::getSize() {
return vec.size();
我从来没有做了一个模板类之前,所以请原谅我,如果这里的问题是微不足道的。
VisitedSet
是一个模板,而不是一类,所以你不能使用VisitedSet
嵌套名指定中如VisitedSet::getSize()
正如您所指定的声明class VisitedSet<T>
所有class T
,你必须指定的定义VisitedSet<T>::getSize()
对所有class T
:
template<class T>
int VisitedSet<T>::getSize() {
// ^^^
return vec.size();
}
模板的名称可以,但是,使用,就好像是一个模板定义中的类:
template<class T>
struct Example {
Example* parent;
T x, y;
};
在这种情况下, Example
是用于短Example<T>
你要这个:
template <class T>
int VisitedSet<T>::getSize() {
return vec.size();
}
您必须声明中定义的模板参数,以及
template<class T>
int VisitedSet<T>::getSize() {
return vec.size();
}
否则编译器不能与之相匹配的声明。 例如,有可能是某些参数类型专业。
你需要让你的编译器知道你是在实现模板函数的方法:
template<typename T>
int VisitedSet<T>::getSize() {
return vec.size();
}
尝试把
template <typename T>
VisitedSet执行::的getSize()以上 - 但要注意的是,在一般情况下,模板类和函数都应该被内联。 见C ++ FAQ 这里了解更多信息。