为什么我在虚拟类和具体类中收到“未定义的符号... typeinfo ... vtable”?

2024-01-02

我正在重新学习 C++(意思是:对我温柔点!:)。我有一个超类(Node)与抽象方法(step())必须在子类(TestNode)。它编译时没有错误,也没有任何警告,但链接它会导致:

bash-3.2$ g++ -Wall -o ./bin/t1 src/t1.cpp
Undefined symbols for architecture x86_64:
  "typeinfo for test::Node", referenced from:
      typeinfo for test::TestNode in t1-9f6e93.o
  "vtable for test::Node", referenced from:
      test::Node::Node() in t1-9f6e93.o
  NOTE: a missing vtable usually means the first non-inline virtual member function has no definition.
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

据我所知,我have定义了“第一个非内联虚拟成员函数”(即TestNode::step()).

我仔细阅读了错误消息,我阅读了博客文章here http://www.educatedguesswork.org/2011/09/undefined_symbol_vtable_what_t.html并查看了许多其他 SO 帖子(未定义的符号“vtable for ...”和“typeinfo for...”? https://stackoverflow.com/q/1693634/558639, 如何查找类中未定义的虚函数 https://stackoverflow.com/q/3658072/558639, and C++ 缺少 vtable 错误 https://stackoverflow.com/q/15265106/558639),但我觉得离启蒙还没有更近。

我缺少什么?

这是整个程序。

#include <stdio.h>

namespace test {

  class Node {
  public:
    virtual Node& step(int count);
  };

  class TestNode : public Node { 
  public:
    TestNode();
    ~TestNode();
    TestNode& step(int count);
  };

  TestNode::TestNode() { }
  TestNode::~TestNode() { }
  TestNode& TestNode::step(int count) {
    printf("count = %d\n", count);
    return *this;
  }

} // namespace test    

int main() {
  return 0;
}

问题是你没有提供实现Node::step()。如果你真的希望 Node 没有步骤的实现,那么你应该将其设为纯虚函数Node::step(int count) = 0,从而使 Node 成为一个抽象类(不能直接实例化它)。否则,定义 Node::step 的实现。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么我在虚拟类和具体类中收到“未定义的符号... typeinfo ... vtable”? 的相关文章

随机推荐

  • 根据“.”将GL_CODE列拆分为不同的列,而不使用SQL中的函数[重复]

    这个问题在这里已经有答案了 我需要一个查询来根据 将 GL CODE 分成不同的列 作为分隔符 我已附上我已完成的设置的屏幕截图 但在提取第七段后出现错误 请注意 每个元素中的每行的字符串长度并不相同 我使用过的代码 select YEAR
  • 是否有任何工具可以将 SVG 数据转换为 Canvas 友好的输入? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何在 android 中限制仅沿 y 轴拖放?

    我试图将拖放运动限制为仅在 Y 轴上 以便用户只能查看视图并将其向上或向下拖动 而不能向左或向右拖动 我现在有两个视图 textView 和 dropZone 的 id 其中一个 textView 设置了触摸侦听器 另一个 dropZone
  • 自上而下的递归方案

    我们能否定义一个递归方案 在不失去任何通用性的情况下 自上而下构造值 而不是自下而上 这将非常有帮助 因为我已经看到很多次首先应用使用递归方案内部定义的函数reverse其输入 清楚地表明需要foldl 就像 从前到后 执行 尽管人们普遍认
  • 经典 ASP - 获取完整的 url 名称

    我想知道是否有人可以帮助我 我有以下 URL 这是动态的 www website com images gal boxes pic004 asp 我如何使用经典 ASP 提取 boxes pic004 部分 Thanks
  • 返回应用程序时取消选择表视图行

    我有一个表格视图 其中一个表格视图单元格打开另一个应用程序 当我返回我的应用程序时 表格视图单元格仍然突出显示 返回应用程序时取消选择表格视图单元格的最佳方法是什么 编辑 问题是 viewWillAppear or viewDidAppea
  • 如何为 UITextField 实现类似 NSLineBreakByTruncatingHead 的功能?

    我需要实现类似的目标NSLineBreakByTruncatingHead for UITextField如此处所示 我们假设原文是 这是无法在 UITextField 内显示的长文本 我需要它像 无法显示在 UITextField 内 但
  • 在 Objective C (Cocoa) 线程中运行 C 代码(适用于 iOS)

    首先 我是一名非常新的 Objective C Cocoa iOS 开发人员 但我以前编写过 C C 应用程序 因此 我设法在我的 iPhone 应用程序中运行 Rabbitmq c http hg rabbitmq com rabbitm
  • Java中数组的使用方法

    我是 Java 新手 我正在阅读如何在 java 中使用数组 它说在java中使用数组你必须遵循三个步骤 即声明数组 创建数组和初始化数组 我明白了但是当我没有遵循上面的所有步骤时 下面的代码如何工作 int array 1234 234
  • 正确保存并更新单选按钮响应 java

    我正在尝试将单选按钮用户响应保存在 Firestore 中的 UID 下 我有两个选择yes and no到这个问题 它仅在用户按下按钮选择一个选项时起作用一次 但如果用户想要更改答案 它不会更新 替换旧响应 我想知道是否有人可以提供帮助
  • Python 长文件名支持在 Windows 中被破坏

    我编写Python脚本来复制文件 不幸的是 由于文件名太长 gt 256 它一直失败 有办法解决这个问题吗 我使用的是 Python 2 5 4 和 Windows XP Cheers Use 以字符串开头的路径 http msdn mic
  • IPv4 和 IPv6 禁止

    如果我想在我的网站上通过 IP 禁止用户 是否可以通过两者来实现IPv4 and IPv6 某些浏览器显然默认使用 IPv4 地址 而其他浏览器 如果有可能 则使用 IPv6 地址 因此 如果我通过某人当前的 IP 对其进行禁止 他们只需使
  • 解决MultisampleFramebufferAPPLE生成INVALID_OPERATION

    我不明白为什么glResolveMultisampleFramebufferAPPLE生成错误 1282 0x0502 GL INVALID OPERATION 设置代码 glGenFramebuffers 1 framebuffer gl
  • 为现有基于 MVC 的网站创建 REST API

    我有一个使用 ASP NET MVC3 开发的网站 我现在想公开一个 REST API 供其他人使用 它将公开与网站相同的功能 在网站中 一旦用户登录并根据数据库验证凭据 会话就会管理用户的登录状态 我如何使用 REST API 执行相同的
  • 在 PHP 中使用 getter 和 setter 代替函数或简单的公共字段有什么优点? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我不是 PHP 开发人员 所以我想知道 PHP 中以纯 OOP 风格使用私有字段 我喜欢的方式 使用显式 getter setter 的优点和缺
  • 保证金不起作用?两个元素之间需要空间

    首先 我很抱歉我没有把链接放在这里 这是一个工作网站 我不被允许 如果有必要 我会发布我的代码的相关部分 所以问题是非常基本的 我有一个带有一些图像的 div 和一个标题 h3 下面是我的内容开始的地方 无论我如何努力在两者之间创造一些空间
  • 在 if 语句/管理进程中使用 fork

    我有这段代码 printf L1 if fork 0 printf L2 if fork 0 printf L3 fork printf End n 作为练习 我试图找出运行此代码 而不实际运行它 所产生的有效 无效输出的一些示例 我仍然对
  • 在 Java 中将文件的前 N ​​个字节作为输入流读取?

    在我的一生中 我一直无法找到与我想做的事情相匹配的问题 所以我将在这里解释我的用例 如果您知道某个主题已经涵盖了该问题的答案 请随时引导我找到该主题 我有一段代码可以定期 每 20 秒 将文件上传到 Amazon S3 该文件是由另一个进程
  • React Hooks - 即使状态没有改变,useEffect 也会触发

    我在组件内设置了一个效果 如果另一个状态属性发生变化 它会更改视图 但由于某种原因 当组件安装时 效果会运行 即使值detailIndex没有改变 const EventsSearchList gt const view setView u
  • 为什么我在虚拟类和具体类中收到“未定义的符号... typeinfo ... vtable”?

    我正在重新学习 C 意思是 对我温柔点 我有一个超类 Node 与抽象方法 step 必须在子类 TestNode 它编译时没有错误 也没有任何警告 但链接它会导致 bash 3 2 g Wall o bin t1 src t1 cpp U