【发布时间】:2011-09-07 23:48:45
【问题描述】:
struct A
{
virtual void foo(); // unused and unimplemented
virtual void bar () {}
};
int main ()
{
A obj; // ok
obj.bar(); // <-- added this edition
A* pm = (A*)malloc(sizeof(A)); // ok
A* pn = new A; // linker error
}
对于堆栈上的对象it works fine。但是对于new(不是malloc)在堆上的分配,它给出了链接器错误:
undefined reference to `vtable for A'
【问题讨论】:
-
我很震惊!如果是在栈上分配的,可以吗? O.O
-
堆栈分配也不起作用(“A obj;”),你确定这是“// ok”吗?
-
这段代码是假的:如果没有对
malloc的结果进行显式转换,它将无法编译。 -
我认为声明编译器优化标志很重要。使用 -O4,gcc 编译“A obj;”但不是“新A”;与 -O0 都失败。
-
@AndreyT:您一直将帖子和代码称为“假”,就好像有人试图将某些东西拉到您身上一样。 “假”代码和“坏”代码是有区别的。
标签: c++ linker-errors language-lawyer virtual-functions