c++ - 对父类中方法的 undefined reference

标签 c++ oop undefined-reference

我的类(class)中有三门课,

class A {
public:
  virtual ~A() {
    decompose();
  }
  virtual void decompose();
};

class B:public A {
private:
  int *b_data;
public:
  void decompose() {
    if (b_data != NULL) delete [] b_data;
  }
};

class C:public A {
private:
  int *c_data;

public:
  void decompose() {
    if (b_data != NULL) delete [] c_data;
  }
};

但是当我用 g++ 编译此代码时,出现错误:

In function `~A':
undefined reference to `vtable for A'
undefined reference to `A::decompose()'

In function `A':
undefined reference to `vtable for A'
undefined reference to `typeinfo for A'
undefined reference to `typeinfo for A'

如果有帮助的话,类 A 是在 .h 文件中定义的,它的析构函数是内联定义的,另外两个类有两个文件 .h.cpp

在我的程序中,我根据以下方式调用这些类:

int main() {
  A *a;
  a = new B();  //constructor is defined
  delete a;
  return 0;
}

这段代码有问题吗?

最佳答案

在构造函数和析构函数中调用虚函数时要小心。它们不会像平常一样被覆盖。 A(..)~A() 始终调用 A::decompose。我认为编译器提示它找不到这个函数。

关于c++ - 对父类中方法的 undefined reference ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22750855/

相关文章:

sharepoint - 子类化 SharePoint 对象

linux - 对符号 'pthread_key_delete@@GLIBC_2.2.5 的 undefined reference

c - 位声明 - 对 'variable' 的 undefined reference

c++ - 使用 G++ boost 静态链接问题

c# - C++ 库问题

c++ - 如何让 MinGW 将 "text"之类的文本视为 const char*

oop - 模块化和面向对象编程之间的最大区别是什么?

java - 如何在骨架实现(即类)中实现一个接口(interface),该接口(interface)的两个实例可以相互依赖,而无需向下转型?

java - C std::string 作为带有 SWIG 的 Java 中的输出参数

python - OpenCV:何时使用 GridAdaptedFeatureDetector?