c++ undefined reference to `vtable

Ma question a changé à partir de l'autre que j'ai posté. J'ai commencé avec plusieurs fichiers et a décidé de tout mettre dans un main.cpp fichier pour maintenant, juste pour le faire fonctionner.

main.cpp:

#include <iostream>
using namespace std;
class arrayListType {
public:
bool isEmpty() ;
bool isFull() ;
int listSize() ;
int maxListSize() ;
void print() ;
bool isItemAtEqual(int location, int item) ;
virtual void insertAt(int location, int insertItem) = 0;
virtual void insertEnd(int insertItem) = 0;
void removeAt(int location);
void retrieveAt(int location, int& retItem) ;
virtual void replaceAt(int location, int repItem) = 0;
void clearList();
virtual int seqSearch(int searchItem) const  = 0;
virtual void remove(int removeItem) = 0;
arrayListType (int size = 100);
arrayListType ( arrayListType& otherList);
virtual ~arrayListType();
protected:
int *list;
int length;
int maxSize;
};
bool arrayListType::isEmpty()  {
return (length == 0);
}
bool arrayListType::isFull()  {
return (length == maxSize);
}
int arrayListType::listSize()  {
return length;
}
int arrayListType::maxListSize()  {
return maxSize;
}
void arrayListType::print()  {
for (int i = 0; i < length; i++)
cout << list[i] << " ";
cout << endl;
}
bool arrayListType::isItemAtEqual(int location, int item)  {
if (location < 0 || location >= length) {
cout << "The location of the item to be compared is out range." << endl;
return false;
}
else
return(list[location] == item);
}
void arrayListType::removeAt(int location) {
if (location < 0 || location >= length){
cout << "The location of the item to be removed is out of range." << endl;
}
else {
for (int i = location; i < length -1; i++)
list[i] = list[i+1];
length--;
}
}
void arrayListType::retrieveAt(int location, int& retItem)  {
if (location < 0 || location >= length) {
cout << "The location of the item to be retrieved is out of range." << endl;
}
else
retItem = list[location];
}
void arrayListType::clearList() {
length = 0;
}
arrayListType::arrayListType (int size) {
if (size <= 0) {
cout << "The array size must be positive. Creating an array of the size 100." << endl;
maxSize = 100;
}
else
maxSize = size;
length = 0;
list = new int[maxSize];
}
class orderedArrayListType: public arrayListType {
public:
void insertAt(int location, int insertItem);
void insertEnd(int insertItem);
void replaceAt(int location, int repItem);
int seqSearch(int searchItem) const;
void insert (int insertItem);
void remove (int removeItem);
orderedArrayListType (int size = 100);
~orderedArrayListType();
private:
void quickSort();
};
void orderedArrayListType::quickSort(){
//private function for sorting "list."
//using a "quicksort" method
//addapted from: http://www.algolist.net/Algorithms/Sorting/Quicksort
if (length == 0) {
cout << "Cannot sort an ampty list." << endl;
}
else {
int left = 0, right = length;
int i = left, j = right;
int tmp;
int pivot = list[(left + right) / 2];
/* partition */
while (i <= j) {
while (list[i] < pivot)
i++;
while (list[j] > pivot)
j--;
if (i <= j) {
tmp = list[i];
list[i] = list[j];
list[j] = tmp;
i++;
j--;
}
};
/* recursion */
if (left < j)
quickSort();
if (i < right)
quickSort();
}
}
void orderedArrayListType::insertAt(int location, int insertItem){
if (location < 0 || location >= length){
cout << "The location of the item to be removed "
<< "is out of range." << endl;
}
else if(length == maxSize){
cout << "Cannot insert in a full list." << endl;
}
else {
for (int j = length; j < location; j--){ 
list[j+1] = list[j]; 
/* 
Start at the end of the array and move each item 
out by one. Coninue until list[j] is at the 
location, then set the list[location] to the value.
*/  
}
list[location] = insertItem;
length++;
}
quickSort();
}
void orderedArrayListType::insertEnd(int insertItem) {
if (length == maxSize){
cout << "Cannot insert in a full list." << endl;
}
else {
list[length] = insertItem;
length++;
}
quickSort();
}
void orderedArrayListType::replaceAt(int location, int repItem) {
if (location < 0 || location >= length){
cout << "The location of the item to be replaced "
<< "is out of range." << endl;
}
else
list[location] = repItem;
quickSort();
}
int orderedArrayListType::seqSearch(int searchItem) const {
int loc;
bool found = false;
loc = 0;
while (loc < length && !found) {
if (list[loc] == searchItem)
found = true;
else
loc++;
}
if (found)
return loc;
else
return -1;
}
void orderedArrayListType::insert (int insertItem){
if (length == 0){
list[length++] = insertItem;
}
else if (length == maxSize){
cout << "Cannot insert in a full list." << endl;
}
else {
int loc;
bool found = false;
for (loc= 0; loc < length; loc++){
if (list[loc] >= insertItem){
found = true;
break;
}
}
for (int i = length; i > loc; i--) {
list[i] = list[i-1];
}
list[loc] = insertItem;
length++;
}
quickSort();
}
void orderedArrayListType::remove (int removeItem) {
int loc;
if (length == 0)
cout << "Cannot Delete from an ampty list." << endl;
else {
loc = seqSearch(removeItem);
if (loc != -1)
removeAt(loc);
else
cout << "The item to be deleted is not in the list." << endl;
}
}
orderedArrayListType::orderedArrayListType (int size)
:arrayListType(size){
}
int main() {
// orderedArrayList intlist(25);
// orderedArrayListType intList = new orderedArrayListType(25);
}

Le message d'erreur exact:

/tmp/ccdTFaE0.o: Dans la fonction arrayListType::arrayListType(int)':
main3.cpp:(.text+0x25c): undefined reference to
vtable pour
arrayListType'
/tmp/ccdTFaE0.o:(.rodata._ZTV20orderedArrayListType[vtable pour
orderedArrayListType]+0

x38): undefined reference to
orderedArrayListType::~orderedArrayListType()'
/tmp/ccdTFaE0.o:(.rodata._ZTV20orderedArrayListType[vtable for
orderedArrayListType]+0
x40): undefined reference to
orderedArrayListType::~orderedArrayListType()'
/tmp/ccdTFaE0.o:(.rodata._ZTI20orderedArrayListType[typeinfo pour
orderedArrayListType]

+0x10): undefined reference to `typeinfo pour arrayListType' collect2: ld a retourné 1 code de sortie

tldr;

#include <iostream>
using namespace std;
class arrayListType {
public:
bool isEmpty() const;
...
arrayListType (int size = 100);
arrayListType ( arrayListType& otherList);
virtual ~arrayListType();
protected:
int *list;
int length;
int maxSize;
};
//definitions 
bool arrayListType::isEmpty()  {
return (length == 0);
}
class orderedArrayListType: public arrayListType {
public:
void insertAt(int location, int insertItem);
...
orderedArrayListType (int size = 100);
~orderedArrayListType();
private:
void quickSort();
};
void orderedArrayListType::quickSort(){
...
}
void orderedArrayListType::insertAt(int location, int insertItem){
....     
quickSort();
}
orderedArrayListType::orderedArrayListType (int size)
:arrayListType(size){
}
int main() {
orderedArrayList intlist(25);
// orderedArrayListType intList = new orderedArrayListType(25);
}
Sérieusement - que vous voulez que je debug 263 des lettres de crédit pour vous - réduire l'exemple de quelque chose que j'ai peut-être pris la peine de lire
Sonne comme un manque destructeur définition à moi.
Je suis désolé, je l'ai eu vers le bas avec 10 lignes et la dernière question, j'ai demandé, ils ont dit afficher le code réel... je vais modifier
Je vais poster le code comme une nouvelle réponse. Semble le moyen le plus facile.
modifier la question, et de coller le code.

OriginalL'auteur Jeff | 2012-09-08