【发布时间】:2014-05-06 10:02:52
【问题描述】:
我写了以下代码:
//--a.cpp--//
#include <stdio.h>
class A
{
public:
void bar();
virtual void foo()=0;
};
class B: public A
{
public:
void foo()
{
A::bar();
}
}
int main()
{
B *b= new B();
b->foo();
return 0;
}
//--b.cpp--//
#include <stdio.h>
class A
{
public:
void bar()
{
printf("class A");
}
}
现在我正在编译和链接这些模块,如下所示:
g++ -c a.cpp
g++ -c b.cpp
g++ -o bin a.o b.o
但是undefined reference error 是由链接器引发的。我不明白,为什么?
【问题讨论】:
-
您在
b.cpp中重新定义了类A,而不是实现。 -
@πάνταῥεῖ 你的意思是我必须将 A 的防御淹没在标题中吗?
-
是的,把
A的声明放到头文件中,像往常一样把A::bar()的实现放到a.cpp中。
标签: c++ class linker linker-errors