2
での作業中に、私はすべてのメソッドがArray.cppファイルで、次のように実装されているクラスArrayリンカエラー「に未定義の参照」テンプレート
template <typename T>
class Array : public SequentialContainer<T>{
public:
Array(Int size){local_vector.reserve(size);}
Array(std::initializer_list<T> initializer_list){
local_vector.assign(initializer_list);
}
virtual Boolean contains(T &object) const;
virtual Boolean contains(Container<T> &container) const;
virtual Int size() const;
virtual T &operator[](Int idx);
virtual T &get(Int idx);
virtual void set(Int idx, const T &object);
virtual Int indexOf(T &object);
virtual Iterator<T> iterator() const;
};
を持っている:私がしようとした場合
template <typename T>
Boolean Array<T>::contains(T &object) const {
//code
}
main.cppをファイルに、このArrayクラスを使用する:
Array<int> c = {1, 2, 3, 4, 5, 6};
std::cout << c.[4] <<std::endl;
私は、これらのリンカエラーを取得しています:
undefined reference to `Array<int>::iterator() const'
undefined reference to `Array<int>::contains(int&) const'
undefined reference to `Array<int>::contains(Container<int>&) const'
etc...
(Arrayクラスのすべての単一メソッド用)すべてのファイルは私のcmakeファイルにあり、コンパイルする必要があります。 なぜこのリンカエラーが発生していますか?誰かが私にこのことを説明できますか?
'Array.cpp'ヘッダーにすべてのテンプレート定義を入れる必要があります。テンプレートは通常のクラスのようには機能しません... – Blacktempel
_ "すべてのメソッドは、Array.cppファイルで次のように実装されています。" _ Whoops –