重複の可能性:
テンプレートをヘッダーファイルにのみ実装できるのはなぜですか?
未定義の参照/未解決の外部シンボルエラーとは何ですか?それを修正するにはどうすればよいですか?
ファイルにテンプレートクラスを定義しました。
point.hは
#ifndef POINT_H
#define POINT_H
using namespace std;
template <typename T, int size>
class point {
private:
T coordinates[size];
public:
point();
void set_coordinates(const T *);
void get_coordinates(T *);
};
#endif /* POINT_H */
point.cは
#include "point.h"
template <typename T, int size>
point::point() {
for (int i = 0; i < size; i++)
coordinates[i] = 0;
}
template <typename T, int size>
void point<T, size>::set_coordinates(const T *coordinates) {
for (int i = 0; i < size; i++)
this->coordinates[i] = coordinates[i];
}
template <typename T, int size>
void point<T, size>::get_coordinates(T *coordinates) {
for (int i = 0; i < size; i++)
coordinates[i] = this->coordinates[i];
}
このテンプレートをとして使用していpoint<int, 2> p0;
ます。しかし、コンパイラはpoint<int, 2>
定義されていないエラーを出します。私はこれを検索し、2つの解決策を見つけましたexport
-1。変数を使用する。しかし、すべてのコンパイラでサポートされているわけではないことを読みました。だから、私はそれを使いたくありません。2.次のような明示的なクラスの特殊化を作成する
template <> class point<int> {
...
}
しかし、これを行う他の方法はありませんか?(つまり、C ++標準コンテナーでは、これを行うために何らかの手法を使用した可能性があります。)