我知道以前曾问过类似的问题,但我读了其中的几个,但仍然看不到我要去哪里。当我只编写类而不将原型(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;
};

在这种情况下,ExampleExample<T>的缩写。

关于c++ - “used without template parameters”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10263017/

10-11 22:59