C++ 为什么我的C++;编译器是否说虚拟成员没有定义?
可能是重复的,但我不确定,因为我的程序位于单个文件中C++ 为什么我的C++;编译器是否说虚拟成员没有定义?,c++,g++,C++,G++,可能是重复的,但我不确定,因为我的程序位于单个文件中 // my-program.cpp class A { public: virtual void foo(); }; class B : public A { public: void foo() {} }; int main() { B myB; } 然后我在终端中键入g++my program.cpp,编译器会给出以下警告: 架构x86_64的未定义符号: “A的类型信息”,引用自: 银行标识代码cce8BmNY.o的
// my-program.cpp
class A
{
public:
virtual void foo();
};
class B : public A
{
public:
void foo() {}
};
int main()
{
B myB;
}
然后我在终端中键入g++my program.cpp
,编译器会给出以下警告:
架构x86_64的未定义符号:
“A的类型信息”,引用自:
银行标识代码cce8BmNY.o的类型信息
“A的vtable”,引用自:
cce8BmNY.o中的A::A()
注意:缺少vtable通常意味着第一个非内联虚拟成员函数没有定义。
ld:找不到架构x86_64的符号
collect2:ld返回了1个退出状态如果你想拥有一个没有定义的函数,你应该写
virtualvoid foo()=0代码>它说没有定义,因为没有定义。您已经声明了A::foo()
,但没有定义它
也许您希望它是纯虚拟的(使基类A
abstract):
在这种情况下,它不需要定义,因为它总是在任何可以实例化的类中被重写
或者,您可能希望能够直接实例化A
,在这种情况下,它将需要一个定义
virtual void foo() = 0;