2010-12-06 188 views
5

我有一个类的设置,并从那个类我使用继承。C++无法解析的外部符号

在文件啊

class a 
{ 
public: 
    virtual void print(); 
}; 

在文件BH:

#include "a.h" 
#include <iostream> 
class b: public a 
{ 
public: 
    void print(); 
}; 

而且在b.cpp

#include "a.h" 
#include "b.h" 
void b::print(){}; 

在主文件我包括这两个文件:

#include "a.h" 
#include "b.h" 

然而,我得到了虚拟功能打印的未解决符号。文件a.obj被列为产生错误的文件我做错了什么?如果我将b.cpp移入类定义下的b.h,它可以正常工作。

回答

9

你有一个b :: print的实现,但不是一个:: print。如果实例化类a的一个对象并在其上调用print(),会发生什么?即

a o; 
o.print(); 

b :: print覆盖a :: print,但仍然需要执行a :: print(除非使其为纯虚拟)。

进行打印纯虚拟,其定义是这样的:

virtual void print() = 0; 

当一个类有纯虚函数,你不能实例化类的对象。您必须从该类派生出来,并在您拥有可实际实例化的类之前提供任何纯虚函数的实现。

+0

我猜的到底需要一个分号,这是它,即使在OP并没有真正提供足够的信息来确定。 – 2010-12-06 02:39:18

+0

纯虚是什么意思? – 2010-12-06 02:39:23

1

它可能是一个拼写错误,但在b.cpp中,您已经在名为Add的类中实现了print()函数,而不是b类。

0

我想你在类接口