我对 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;
}
我一直在在线阅读有关如何在包含模板时避免错误的信息。其中之一就是我想在这里实现的目标:拥有#include "a.cpp"
in a.h
. 但是,我查看的示例仍然使用#include "a.h"
in a.cpp
,如示例代码中所示。但是,我得到了function template has already been defined
错误。我发现在 a.cpp 中使用#ifdef A
并注释掉#include "a.h"
将帮助我摆脱这个重新定义的错误。但我想了解发生了什么。重新定义不应该已经由 include 守卫处理了a.h
吗?