• ベストアンサー

c++におけるtemplateについて

c++の自作templateを関数宣言部と関数定義部とで、ファイルを分割する事を考えているのですが、エラーが出てtemplateをincludeすることが出来ないでいます。 例えば、 <ファイル:test.H> #ifndef test_H #define test_H #include <iostream> template<class T> class test { private: int row_, col_; public: test( int , int ); }; #endif <ファイル test.C> #include "test.H" template<class T> test<T>::test(int a, int b) :row_(a), col_(b) { std::cout << "コンストラクター" << std::endl; } <ファイル main.C> #include "test.H" #include<iostream> int main() { test a( 3, 3) return 0; } のようにtemplateファイルを分割した場合、 undefined reference to `test<double>::test(int, int)' collect2: ld returned 1 exit status のようなエラーがでます。 書籍:新c++言語入門・シニア編(下)の29章には「export」を関数定義部に付ければ良いような記述がありましたが、エラーを解決することが出来ませんでした。 main.Cにて、test.Cをインクルードするとこの問題を回避することが出来るのですが・・・。 そもそもtemplateは上記のように宣言部と定義部とを別々のファイルにすることはできないのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

今の時点で export をサポートしているコンパイラなんて, ほとんど存在しないんじゃないかなぁ. 少なくとも gcc はサポートしていないはず. 昔, つまり今の GCC が EGCS と呼ばれていた時代には, 「特定の template をインスタンス化するソースファイル」を吐くようにリンカを改造するという方針で処理した例がありました.

carnot
質問者

お礼

exportはをサポートしたコンパイラは殆ど存在しないんですね。ご回答いただき、ありがとうございました。

その他の回答 (1)

  • aris-wiz
  • ベストアンサー率38% (96/252)
回答No.2

そもそもtemplateにしたいのは関数ですか?クラスですか? 質問は関数のように聞こえますが、サンプルはクラスだし。。。 質問から何がやりたいのか、 いまいち読み取れないのでもう一度自分がやりたいことを 整理してみては?

参考URL:
http://next1.cc.it-hiroshima.ac.jp/CPPPUBLISH/node14.html
carnot
質問者

補足

コメントをいただき、ありがとうございます。 クラスをtemplateにしたいと考えています。よろしくおねがいします。

関連するQ&A