0
クラスVectorを作成すると、なぜクラッシュするのかわかりません。助けてください。このプログラムでは、任意のタイプの要素を配列に追加したいと考えています。私はあなたがテンプレートクラスが定義されているのと同じヘッダに(コンストラクタ定義を含む)メンバ関数定義を配置する必要があり、クロスgccで日食のUbuntu空の角かっこのあるデフォルトのコンストラクタC++のエラー
template<typename T>
class Vector{
public:
Vector();
void add(const T&);
private:
T *elem;
int cap;
int len;
};
template<typename T>
Vector<T>::Vector(){
len = 0;
cap = 30;
elem = new T[cap];
}
template<typename T>
void Vector<T>::(const T& m){
elem[len] = m;
len ++;
}
// Here I create Vector v, if I put Vector<int> v() I don't get error
Vector<int> v; //error "undefined reference to `Vector<int>::Vector()"
v.add(21); //error
[mcve]を入力してください。 – Barry
@Brian「非常に面白い機能」を使わないのはとても面白いです。 :) –
コンパイラは、 'Vector'を使う予定の時点でテンプレート定義( 'Vector 'クラスとそのメンバ関数の両方)の可視性が必要です。別々のコンパイルとテンプレートはうまくいっていません。クラスを宣言するヘッダにメンバ関数の定義を置き、 'Vector'テンプレートを使用する必要があるコードにヘッダーを'#インクルード 'してください。 [これは完全な答えではありません]。 –
Peter