Tengo un error de compilación undefined reference to
en un método heredado en C++. He leído una conversación en un foro de openclassrooms y respuestas en StackOverflow, pero ninguna me ayudaba.
El primero me dice que es un error de principiante con una mezcla de C y C++ o un enlazado que no está bien establecido. No sé lo que es un enlazador y leí en Wikipedia que:
un enlazador (linker) es un programa que toma los objetos generados en los primeros pasos del proceso de compilación, la información de todos los recursos necesarios (biblioteca), quita aquellos recursos que no necesita, y enlaza el código objeto con su(s) biblioteca(s) con lo que finalmente produce un fichero ejecutable o una biblioteca.
Aquí está el error:
$ g++ main.cpp MaxSize.cpp -o main
/tmp/ccG0cfMh.o: In function `MaxSize::MaxSize(int)':
MaxSize.cpp:(.text+0x34): undefined reference to `TasMin::TasMin(int)'
MaxSize.cpp:(.text+0x151): undefined reference to `TasMin::~TasMin()'
/tmp/ccG0cfMh.o: In function `MaxSize::~MaxSize()':
MaxSize.cpp:(.text+0x1b1): undefined reference to `TasMin::~TasMin()'
/tmp/ccG0cfMh.o:(.rodata._ZTV7MaxSize[_ZTV7MaxSize]+0x20): undefined reference to `TasMin::min_heapify(int)'
/tmp/ccG0cfMh.o:(.rodata._ZTI7MaxSize[_ZTI7MaxSize]+0x10): undefined reference to `typeinfo for TasMin'
collect2: error: ld returned 1 exit status
Aquí está la parte MaxSize.cpp que pienso que nos interesa:
#include "MaxSize.h"
#include<iostream>
using namespace std;
MaxSize::MaxSize(int size):TasMin(size){
int array[size];
for (int i = 0; i < size; i++)
{
cout<<"enter element"<<(i)<<endl;
cin>>array[i];
}
build_minheap(array, size);
}
MaxSize::~MaxSize()
{
delete[] array;
}
// funcion que construye un árbol
void MaxSize::build_minheap(int *array, int n)
{
int entier;
for(int i=size/2;i>=0;i--)
{
min_heapify(array,i,n);
}
}
// funcion que situa los elementos colocado al azar del array en el array
void MaxSize::min_heapify(int* array, int i, int size)
{
int j, temp;
temp = array[i];
j=2*i;
while(j<=size)
{
if(j<size && array[j+1] <array[j])
j= j+1;
if(temp<array[j])
break;
else if (temp >=array[j])
{
array[j/2]=array[j];
j=2*j;
}
}
array[j/2]=temp;
}
Aquí está el prototipo MaxSize.h
:
#include "TasMin.h"
class MaxSize : public TasMin
{
public:
MaxSize(int size);
MaxSize(int* array, int length);
~MaxSize();
virtual void min_heapify(int* array, int i, int size);
virtual void build_minheap(int* array,int size);
private:
int size;
int* array;
};
Y, finalmente, aquí está TasMin.h
:
class TasMin
{
public:
TasMin(int size);
virtual ~TasMin();
virtual void min_heapify(int size);
virtual void build_minheap(int* array,int size);
private:
int size;
};
main.cpp
#include <iostream>
#include "MaxSize.h"
using namespace std;
int main(){
int size,i,x;
cout<<"enter no of elements of array\n"<<endl;
cin>>size;
MaxSize* tableau = new MaxSize(size); // va falloir modifier MaxSize.h et .cpp
}
¿Me pueden ayudar a librarme de este error?