私は C++ に比較的慣れていないので、私の質問には簡単な答えがあるかもしれません。ただし、コードが機能すると思っていたのになぜ機能しないのかわかりません。サンプルコードは以下の通りです。
//a.h
#ifndef A
#define A
template<class T>
class a{
public:
a();
private:
T str;
};
#include "a.cpp"
#endif
//a.cpp
//#ifdef A
#include "a.h"
using namespace std;
template<class T>
a<T>::a(){
str = 'a';
}
//#endif
//driver.cpp
#include"a.h"
#include <string>
using namespace std;
void main(){
a<string> object;
}
テンプレートを含めるときにエラーを回避する方法について、オンラインで情報を読んでいます。その 1 つは、私がここで達成しようとしていること#include "a.cpp"
ですa.h
。ただし、私が調べたサンプルでは、サンプル コードに示されているをまだ使用#include "a.h"
しています。a.cpp
ただし、function template has already been defined
エラーが発生しています。a.cppで を使用して#ifdef A
コメントアウト#include "a.h"
すると、この再定義エラーを取り除くのに役立つことがわかりました。しかし、私は何が起こっているのかを理解したいと思っています。のインクルードガードによって再定義がすでに処理されているはずではありませんa.h
か?