syn*_*tik 26 c++ templates class
我之前已经意识到类似的问题,但是我读过其中的几个,但仍然没有看到我出错的地方.当我只是编写我的类而不将原型与定义分开时,一切正常.当我将原型和定义分开时,问题就出现了,如下所示:
template<class T> class VisitedSet {
public:
VisitedSet();
int getSize();
void addSolution(const T& soln);
void evaluate();
private:
vector<T> vec;
int iteration;
};
Run Code Online (Sandbox Code Playgroud)
作为给出这个错误的定义的一个例子:
int VisitedSet::getSize() {
return vec.size();
Run Code Online (Sandbox Code Playgroud)
我以前从未做过模板课,所以请原谅我这里的问题是微不足道的.
Jon*_*rdy 41
VisitedSet是一个模板,而不是一个类,所以你不能VisitedSet在嵌套的名称说明符中使用VisitedSet::getSize().正如您class VisitedSet<T>为所有人指定声明一样class T,您必须指定VisitedSet<T>::getSize()all 的定义class T:
template<class T>
int VisitedSet<T>::getSize() {
// ^^^
return vec.size();
}
Run Code Online (Sandbox Code Playgroud)
模板的名称可以,但是,使用,就好像是一个类中的模板定义:
template<class T>
struct Example {
Example* parent;
T x, y;
};
Run Code Online (Sandbox Code Playgroud)
在这种情况下,Example是简称Example<T>.