私はこのページを読んでいますWhy can templates only be implemented in the header file? しかし、それはテンプレートクラスに関するものです。コンストラクタはクラスと同じ型をとります(クラスが< int>の場合、コンストラクタもintをとるなど)。しかし、私は単純な(テンプレートではない)クラスを持っています。重複して申し訳ありません、私はこの場合何をすべきか説明してください。テンプレートコンストラクタの実現を分離する方法(クラスがテンプレートでない場合)
フィールド 'double d'を持つクラス 'Object'があり、テンプレートコンストラクタを作成したいと思います。私がクラス内でそれを認識すると、すべてうまくいくが、クラス外(.hから.cppへ)の実現を動かすと動作しない。ここに私のコードです:
Object.hが
class Object {
double d;
public:
template <class T> Object(T t);
};
Object.cpp
#include "Object.h"
template <class T> Object::Object(T t) {
d = t;
}
Xを作成
#include "Object.h"
int main() {
int a = 5;
Object x(a);
float b = 2.5;
Object y(b);
return 0;
}
エラーがラインにmain.cppにに表示されますmain.cppにし、 y、あります:
undefined reference to `Object::Object<int>(int)'
undefined reference to `Object::Object<float>(float)'
[なぜテンプレートはヘッダーファイルにのみ実装できますか?](http://stackoverflow.com/questions/495021/why-can-templates-only-be-implemented-in-the-header -file) – ForceBru