c++ - 对派生类的 undefined reference

标签 c++ constructor undefined-reference

编辑:与 c++ undefined reference to `vtable 有关

我正在尝试做一个关于继承的项目,但我遇到了这个错误:

/tmp/ccw1aT69.o: In function `main':
main.cpp:(.text+0x15): undefined reference to `Derived::Derived(int)'
/tmp/ccw1aT69.o: In function `Derived::~Derived()':
main.cpp:(.text._ZN20DerivedD2Ev[_ZN20DerivedD5Ev]+0x13): undefined reference to `vtable for Derived'
main.cpp:(.text._ZN20DerivedD2Ev[_ZN20DerivedD5Ev]+0x1f): undefined reference to `Base::~Base()'
collect2: ld returned 1 exit status

这是我的代码:

主要.cpp:

#include <iostream>
#include "Base.h"
#include "Derived.h"

int main() {
    Derived intList(25);
}

基础.h:

#ifndef BASE_H
#define BASE_H

class Base {
    public:
            ...
            Base (const Base& otherList);
            virtual ~Base();
    protected:
            int *list;
            int length;
            int maxSize;
};

#endif

基础.cpp:

#include "Base.h"
#include <iostream>

using namespace std;

...definitions of my members...

Base::Base (int size) {
//stuff
}
Base::~Base() {
    delete [] list;
}
Base::Base (const Base& otherList) {
//stuff
}

派生.h:

#ifndef DERIVED_H
#define DERIVED_H
#include "Base.h"

class Derived: public Base {
    public:
             ...
            Derived (int size = 100);
            ~Derived(); //THIS LINE ADDED AFTER FIRST ANSWER
};

#endif

派生.cpp:

#include "Derived.h"
#include <iostream>

using namespace std;

Derived::Derived (int size)
        :Base(size){
}

是什么导致了这个错误?看起来我无法调用构造函数,但对我来说没问题。

编辑:我尝试了第一个解决方案。现在出错:

/tmp/ccA4XA0B.o: In function `main':
main.cpp:(.text+0x15): undefined reference to `Derived::Derived(int)'
main.cpp:(.text+0x21): undefined reference to `Derived::~Derived()'
collect2: ld returned 1 exit status

最佳答案

您在 Base 中声明了一个虚拟析构函数,但您从未定义它。它需要在 Derived 中定义(以及在 Base 中,因为它不是纯虚函数)因为它会被调用一次 main导出。你应该:

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

Base::~Base() {}

class Derived : public Base {
public:
    // ...
    ~Derived();
};

Derived::~Derived() { /* whatever */ }

这至少是您的一个错误的原因。我不知道这个是不是红鲱鱼,但它似乎是:

/tmp/ccw1aT69.o: In function main': main.cpp:(.text+0x15): undefined reference toDerived::Derived(int)'

您定义了 Derived::Derived(int),因此很难想象这是一个真正的错误。定义您的析构函数并查看它是否消失。

关于c++ - 对派生类的 undefined reference ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12326273/

相关文章:

c++ - 什么是 undefined reference /未解析的外部符号错误,我该如何解决?

c++ - 堆叠砸不着火。为什么?

C++:如何在没有 mingwm10.dll 的情况下发布单个可执行文件

使用 Python.h undefined symbol 的 C++ 编译

java - 导致异常的构造函数的 void 修饰符

c - 未定义对 "calcyear"的引用

c++ - 如何从 C++ 中的正则表达式中提取部分?

C++ 错误 : invalid use of 'AppleFarmer::AppleFarmer' when ca

java - 出现错误 :(20, 44​​) java: 构造函数 XXX 无法应用于给定类型;

c - 带有结构的未声明标识符