“不使用模板参数”(“used without template parameters”)

2019-07-29 02:03发布

我知道类似的问题已经被问过,但我看过一些这些的,但仍没有看到我要去哪里错了。 当我只是写我的课,而不会从定义中分离的雏形,一切工作正常。 当我单独原型和定义如下所示的问题发生:

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();

我从来没有做了一个模板类之前,所以请原谅我,如果这里的问题是微不足道的。

Answer 1:

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>



Answer 2:

你要这个:

template <class T>
int VisitedSet<T>::getSize() {
    return vec.size();
}


Answer 3:

您必须声明中定义的模板参数,以及

template<class T>
int VisitedSet<T>::getSize() {
    return vec.size();
}

否则编译器不能与之相匹配的声明。 例如,有可能是某些参数类型专业。



Answer 4:

你需要让你的编译器知道你是在实现模板函数的方法:

 template<typename T>
 int VisitedSet<T>::getSize() {
    return vec.size();
 }


Answer 5:

尝试把

template <typename T>

VisitedSet执行::的getSize()以上 - 但要注意的是,在一般情况下,模板类和函数都应该被内联。 见C ++ FAQ 这里了解更多信息。



文章来源: “used without template parameters”