编辑:与 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 to
Derived::Derived(int)'
您定义了 Derived::Derived(int)
,因此很难想象这是一个真正的错误。定义您的析构函数并查看它是否消失。
关于c++ - 对派生类的 undefined reference ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12326273/