我知道以前曾问过类似的问题,但我读了其中的几个,但仍然看不到我要去哪里。当我只编写类而不将原型(prototype)与定义分开时,一切正常。当我将原型(prototype)和定义分开时,就会发生问题,如下所示:
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>
的缩写。关于c++ - “used without template parameters”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10263017/