【问题标题】:passing this from constructor to other constructor yields undefined reference on linking将 this 从构造函数传递给其他构造函数会在链接时产生未定义的引用
【发布时间】:2011-10-02 00:00:19
【问题描述】:

我正在尝试在代码块下编译具有以下结构的代码:

class a : public cppcms::application (has virtual members) {
 public:
   a() : b_inst(this) {}
   ...
   b b_inst;

}

class b {
  public:
    b(a* ptr) : a_ptr(ptr) {}
  private:
    a* a_ptr;
  ...
}

我正在尝试将其与 codeblocks/g++ 放在一起并收到以下错误消息(在链接阶段):

对 `vtable for b 的未定义引用(在函数 b 中:...)

我尝试使用参考来提取相同的东西,结果相同。我尝试将 a::b_inst 更改为指针并在构造函数(代码部分)中使用 new 创建 b 的实例,结果相同。 这样做的正确方法是什么?

顺便说一句,如果我不添加构造时传递的指针,代码可以工作,所以我认为答案here没有解决它

【问题讨论】:

  • 您的实际代码中的声明顺序是否正确?正如所写,这甚至不会编译。

标签: c++ linker-errors


【解决方案1】:

对 `vtable for b 的未定义引用(在函数 b 中:...)

这意味着您可能还没有实现b 的所有虚方法。当第一个被定义为 AFAIK 时,gcc 会发出 vtable。

这意味着它与你的构造函数的实现无关。

【讨论】:

  • 就寝时间,非常感谢,这是正确的,我忘记了我添加的不仅仅是构造函数,而是固定在构造函数上,因为链接器指向那里
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多