gpt4 book ai didi

c++ - 我能告诉我对 `vtable 的 undefined reference 在哪里吗?

转载 作者:行者123 更新时间:2023-11-30 05:28:45 24 4
gpt4 key购买 nike

我有一个 C++ 类,我用它来尝试模仿 C# 的界面,如下所示:

class Foo {
public:
virtual void baa();
}

这是一个大型 Qt C++ 项目,在 release 上编译良好,但在 debug 模式下编译时出现此错误:

undefined reference to vtable

我知道那个错误是什么意思:没有定义虚方法,对吧?我的问题是:

它只在调试时发生,我不知道为什么。我可以找到我没有定义该方法的源代码(即类)吗?

我愿意使用 Qt 本身、编译器选项、外部工具或其他任何东西。

最佳答案

"Can I find the source (i.e, the class) in which I haven't defined that method"

对我来说,第一个怀疑的是 class Foo 本身。检查它是否包含 void baa() 的定义。如果未定义 Foo::baa(),则您不能执行如下操作:

Foo foo;
foo.baa(); // undefined reference for `Foo::baa()`

现在,如果你确实定义了 Foo::baa(),那么这个错误可能来自 Foo 的其他子类(但是我​​注意到 g++ 提到了哪个子类,很奇怪为什么你看不到它);

class Foo1 : public Foo

一种简单的方法是暂时将 Foo::baa 设为虚拟

class Foo {
public: virtual void baa () = 0;
};

在这种情况下,无论哪个子类没有覆盖此方法,都会产生编译器错误。由于行号等原因,这将使您更容易找到。

为什么它在 DEBUG 模式下给出链接器错误是非常主观的,需要更多信息。

关于c++ - 我能告诉我对 `vtable 的 undefined reference 在哪里吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36659613/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com