我写了以下代码:
//--a.cpp--//
#include "base.h"
class B : public A
{
public:
void foo()
{
A::bar();
}
};
int _tmain(int argc, _TCHAR* argv[])
{
B *b= new B();
b->foo();
return 0;
}
//--b.cpp--//
#include "base.h"
void A::bar()
{
printf("class A");
}
//--base.h--//
class A
{
public:
void bar();
};
它有效。但是我不明白为什么它可以正常工作,但是当我们将class A
定义放入a.cpp
和b.cpp
而不是base.h
时,它不起作用。我认为在预处理阶段之后和编译到对象模块之前,base.h
刚刚替换为base.h
的内容。我们仍然在编译阶段之前重新定义class A
。
答案 0 :(得分:0)
a.cpp和b.cpp都需要访问A类的声明(这是你在base.h中所拥有的)。我在a.cpp和b.cpp的顶部复制并粘贴了base.h(声明)的内容,并在Visual Studio 2012中编译得很好。
您不希望将A类的定义放在两个文件中。类可以在多个位置声明,但必须只在一个中定义。