「テンプレートパラメータなしで使用」質問する

「テンプレートパラメータなしで使用」質問する

同様の質問が以前にも出されていることは承知していますが、そのうちのいくつかを読んでも、どこが間違っているのかわかりません。プロトタイプと定義を分離せずにクラスを記述するだけでは、すべて正常に動作します。問題は、プロトタイプと定義を次のように分離すると発生します。

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

これまでテンプレート化されたクラスを作成したことがないので、ここでの問題が些細なものであればご容赦ください。

ベストアンサー1

VisitedSetはクラスではなくテンプレートなので、VisitedSetのようなネストされた名前指定子で使用することはできません。 for allVisitedSet::getSize()の宣言を指定したのと同じように、 for allの定義を指定する必要があります。class VisitedSet<T>class TVisitedSet<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>

おすすめ記事