为什么我的c++编译器说虚成员没有定义?
Why does my C++ compiler say that a virtual member has no definition?
这个问题可能是重复的,但我不确定,因为我的程序在一个文件中。
// 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的未定义符号:"typeinfo for A",引用自:typeinfo for Bin"vtable for A",引用自:A: A()在北京注意:虚函数表缺失通常意味着第一个非内联虚成员函数没有定义。没有找到架构x86_64的Ld:符号
它说没有定义,因为没有定义。您已经声明了A::foo()
,但没有定义它。
也许你希望它是纯虚拟的(使基类A
抽象):
virtual void foo() = 0;
在这种情况下,它不需要定义,因为它总是会在任何可以实例化的类中被覆盖。
或者您希望能够直接实例化A
,在这种情况下,它将需要一个定义。
如果你想有一个没有定义的函数,你应该写virtual void foo() = 0;
.
相关文章:
- 为什么我不能在一个类的不同行中声明和定义成员变量?
- C++令牌定义成员
- 在没有类定义的标头中定义成员变量
- 如何在类的构造函数中定义成员向量的大小
- 如何在C++中动态定义成员函数
- C++ Boost.Serialization - 用户定义成员的非侵入式序列化
- C++类 - 使用公共变量并在类外定义成员函数
- G++ - 对已定义成员函数的未定义引用
- 在哪里以及如何定义成员变量?在头文件还是实现文件中?
- 是否可以修改STL并自定义成员函数
- 从 boost::mpl:vector 类型列表中定义成员变量
- 在构造对象时定义成员函数
- 为什么定义成员函数指针变量需要类名
- 复制构造函数中的 C++ 用户定义成员
- 如何根据类参数定义成员类运算符
- 使用指向未定义成员函数的指针时的未定义引用
- 如何在运行时定义成员数组大小
- C++-在模板类之外但在头中定义成员函数
- c++在不知道对象类型的情况下定义成员函数指针
- 在特定偏移量中定义成员的结构