テンプレート定義を別々のヘッダファイルに取得するにはどうすればよいですか?継承を使用する場合の未解決の参照
私のコードは、1つのmain.cppに含まれているとコンパイルされます。私はそれを破るとき
maip.cpp
#include <windows.h>
#include <tchar.h>
template<class T1, class T2>
class Base {
public:
virtual ~Base() {}
virtual T1 f1();
virtual T2 f2();
};
template<class T1, class T2>
T1 Base<T1, T2>::f1() {return T1();}
template<class T1, class T2>
T2 Base<T1, T2>::f2() {return T2();}
class Derived : public Base<int, int> {
public:
virtual ~Derived() {}
};
int _tmain(int argc, _TCHAR* argv[])
{
int i;
Derived d;
i = d.f1();
return 0;
}
はしかし、私は、未解決の外部シンボルを得る:
main.cppに
#include <windows.h>
#include <tchar.h>
#include "Base.h"
#include "Derived.h"
int _tmain(int argc, _TCHAR* argv[])
{
int i;
Derived d;
i = d.f1();
return 0;
}
Base.h
#pragma once
template<class T1, class T2>
class Base {
public:
Base();
virtual ~Base() {}
virtual T1 f1();
virtual T2 f2();
};
template<class T1, class T2>
T1 Base<T1, T2>::f1() {return T1();}
template<class T1, class T2>
T2 Base<T1, T2>::f2() {return T2();}
Derived.h
#pragma once
class Derived : public Base<int, int> {
public:
virtual ~Derived() {}
};
これは、その結果:
エラー1つのエラーLNK2019:未解決の 外部シンボル "パブリック:__thiscall ベース::ベース(無効)" で参照される (?? 0?$ Base @ HH @@ QAE @ XZ)function "public:__thiscall Derived :: Derived(void)" (0Derived @@ QAE @ XZ)
minorpoint: 'Derived.h'は' Base'から継承した 'Base.h'をインクルードする必要があります。クライアントに正確な順序でファイルをインクルードするように頼んでいるので、各ヘッダは自立していなければなりません。その前に何も入れずにコンパイルする必要があります)。 –