1. ホーム
  2. c++

[解決済み】"テンプレートパラメータなしで使用"

2022-02-14 07:35:22

質問内容

以前にも同じような質問があったことは承知していますが、それらをいくつか読んでも、まだどこが間違っているのかわかりません。 プロトタイプを定義から分離せずに単純にクラスを書くと、すべてがうまくいきます。 問題は、以下のようにプロトタイプと定義を分離したときに起こります。

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