2

C++で2つの.cppファイルを接続する際に問題が発生しました。これが私のファイルです

Header.h

//Header.h
template <class T> class asd{
asd();
check();
print();
}

file1.cpp

//file1.cpp
//defines all methods in class asd
#include "Header.h"
template<class T> asd<T>:: asd(T a, T b){//codes}
template<class T> T asd<T>:: check(T a){//codes}
template<class T> void asd<T>::print(){//codes}

file2.cpp

//file2.cpp
//main method
#include "Header.h"
int main(){//codes}

私が理解していないのは、file1.cpp内にmain()を配置するとコードは正常に実行されますが、2つのファイルに分割するとコンパイルされないということです。誰かがポインタを教えてもらえますか?

編集:同じ問題を抱えている人のために、解決策はここで見つけることができます: http ://www.cplusplus.com/forum/articles/14272/

4

1 に答える 1

3

クラステンプレートのメンバー関数は、ヘッダーファイルに表示される必要があります。関数定義をからfile1.cppに移動するだけHeader.hです。

あなたがコンパイラだと想像してみてください。コンパイル時に何らかの方法でmainインスタンス化を試みる場合asd、コンパイラは関数定義を参照して適切なコードを生成できる必要があります。たとえば、mainを実行する場合asd<int> my_asd;、コンパイラは。asdT置き換えてインスタンス化する必要がありますint。関数の定義が表示されない場合、関数に対してそれを行うことはできません。

于 2013-03-24T19:42:00.663 に答える