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