"没有模板参数使用"

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>.