【发布时间】:2009-11-26 07:59:27
【问题描述】:
大多数时候,我“避免”在我的单个头文件中使用以下样式。
class a {
void fun();
};
void a::fun() {
}
为了避免下面的错误。我尝试将 cpp 文件中的类定义和 h 文件中的类声明分开。例如,下面是错误的例子:
main.cpp
#include "b.h"
#include "a.h"
int main()
{
a aa;
b bb;
}
啊.h
#ifndef A_H
#define A_H
#include <iostream>
class a {
public:
virtual int fun();
};
int a::fun()
{
int t;
std::cout << "a" << std::endl;
return t;
}
#endif
b.h
#ifndef B_H
#define B_H
#include <iostream>
#include "a.h"
class b {
public:
b();
};
#endif
b.cpp
#include "b.h"
#include "a.h"
b::b()
{
a aa;
aa.fun();
}
我会得到以下错误:
1>b.obj : error LNK2005: "public: virtual int __thiscall a::fun(void)" (?fun@a@@UAEHXZ) already defined in main.obj
但是,当谈到模板时,我通常会这样做:
啊.h
#ifndef A_H
#define A_H
#include <iostream>
template <typename T>
class a {
public:
virtual T fun();
};
template<typename T> T a<T>::fun()
{
T t;
std::cout << "a" << std::endl;
return t;
}
#endif
我可以知道这是一个好习惯吗?
谢谢。
焯
【问题讨论】:
标签: c++