gpt4 book ai didi

c++ - 为什么我得到 "Undefined symbols ... typeinfo ... vtable"与虚拟和具体类?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:52:01 26 4
gpt4 key购买 nike

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

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)

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

我仔细阅读了错误消息,我阅读了博客文章 here并查看了许多其他 SO 帖子( Undefined symbols "vtable for ..." and "typeinfo for..."?How to find undefined virtual functions of a classesc++ a missing vtable error ),但我觉得离启发还很远。

我错过了什么?

这是完整的程序。

#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 没有 step 的实现,那么你应该让它成为一个纯虚函数 Node::step(int count) = 0,从而使 Node 成为一个抽象类(你不能直接实例化它)。否则,为 Node::step 定义一个实现。

关于c++ - 为什么我得到 "Undefined symbols ... typeinfo ... vtable"与虚拟和具体类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23306790/

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