gpt4 book ai didi

c++ - 为什么派生类的构造函数只能在 C++ 类中定义?

转载 作者:行者123 更新时间:2023-11-27 23:08:51 27 4
gpt4 key购买 nike

为什么我的下面的代码会抛出一个编译错误,提示对 Base::Base() 的 undefined reference 、对 Derived 的 vtable 的 undefined reference 以及“.ctors”部分中的错误重定位地址 0x0。但是当我在类中为 Derived 定义构造函数时,编译器能够编译代码。

#include <iostream>

class Base{
public:
Base();
virtual ~Base();
};

class Derived : public Base{
public:
Derived(double theob_);
virtual ~Derived();
private:
double theob;
};

Derived::Derived(double theob_):theob(theob_){}

int main(){
return 0;
}

最佳答案

您的编译单元声明 Base::Base() 但没有定义它。类主体之外的派生构造函数作为非内联函数实现,因此将始终生成,并将引用未包含在编译单元中的构造函数。如果在类描述中包含派生构造函数,它将成为内联的,编译器只会在实际调用时为其生成代码。在您的情况下不是,因为您从未构建 Derived 的实例。如果您实际上正在构建这样的实例,例如通过在 main 中编写 Derived d;,您会遇到同样的问题。您可以将 Base::Base 设为内联空操作:

class Base{
public:
Base() {}
virtual ~Base();
};

关于c++ - 为什么派生类的构造函数只能在 C++ 类中定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21496154/

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