c++ - 在类外定义时 undefined symbol ,在类内定义时有效

标签 c++ undefined-reference undefined-symbol

我是 C++ 的新手,正在尝试了解语法及其行为。特别是,经过大量谷歌搜索和研究后,我无法找出以下代码无法编译的原因:

class base {
public:
    base (const int);
};

class child: base {
public:
    child (const int);
};

child::child(const int num) : base(num) {}

但这将:

class base {
public:
    base (const int);
};

class child : base {
public:
    child (const int num) : base(num) {};
};

在上述情况下,链接器失败并显示:

Undefined symbol base::base(int)

我觉得我犯了一个非常愚蠢的错误,但编译器的错误完全没有帮助。

最佳答案

编译器会准确地告诉您问题出在哪里。如果你调用它,你必须为 base 定义一个构造函数,并且你是从派生类 child 调用它。

尝试将此添加到您的代码中:

base::base(const int num) {}

这会忽略给定的参数,但至少您的代码会编译。

我可能会删除 base 构造函数的声明,并且不会将任何值从 child 类传递给它,除非它被实际使用。

在第二种情况下,构造函数是内联的并且永远不会被调用,因此编译器不需要为它生成代码,但是如果你尝试实际构造一个 child 对象,你会得到相同的结果链接器错误。

未生成内联代码的原因是您没有调用调用站点。声明内联代码的全部目的是使其在调用站点内联。因此,编译器将所有内联代码的代码生成推迟到实际调用时。

关于c++ - 在类外定义时 undefined symbol ,在类内定义时有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30418483/

相关文章:

c++ - 在不同的对话框qt C++上编辑标签

c++ - 未定义的引用 BUT header 在那里

C K&R 1.7 功率函数

linux - undefined symbol ,即使有显式链接

objective-c - Mac OS X App 在使用 NSPopovers 时向后兼容 10.6 和 10.7

c++ 二维数组和指向指针的指针-我不明白这段代码

c++ - 引用不完整的类类型 - C++

C++、linux、无需root的关机命令

c++ - 加载库失败,但引用库中的符号可用

c++ - 通过 C++ 编译器构建 C 应用程序