2

私は Qt5 Creator を使用しています。すべてのファイルがプロジェクトに含まれています (クラス "MyCounter" は IDE ウィザードを使用して作成されます)。コードをこれに減らし、コンパイルして実行すると:

         undefined reference to MyCounter<int>::MyCounter()

main.cpp

#include <QCoreApplication>
#include"mycounter.h" //if include "mycounter.cpp" instead of "mycounter.h" works fine


int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
MyCounter<int> x;
return a.exec();
}

mycounter.h

 #ifndef MYCOUNTER_H
 #define MYCOUNTER_H

 template<class T>
 class MyCounter
 {
   public:
      MyCounter();
 };

 #endif // MYCOUNTER_H

mycounter.cpp

   #include "mycounter.h"
   #include <iostream>


  template<class T>
  MyCounter<T>:: MyCounter()
 {
  std::cout<<"somthing...";
}
4

1 に答える 1

2

テンプレートがある場合は、実装全体がヘッダー ファイルにある必要があります。

テンプレート クラスと関数を個別に実装することは (分別的に)できません(.c ​​pp ファイルですべての特殊化を個別にインスタンス化することはできますが、なぜそれを行うのでしょう?そんなことをしても意味がない…)

于 2013-06-30T15:12:31.210 に答える