PDA

Visualizza la versione completa : [C++] Definizioni multiple e inclusione di file CPP


Nunkij
07-05-2007, 20:44
Salve a tutti, sto cercando di fare una semplice classe in c++ (uso il devc++). Ho un file main e un file heap.cpp che includo (che contiene definizione ed implementazione dei metodi della classe heap). Quando vado a compilare ricevo l'errore "multiple definitions di X" (dove X è il nome d ogni metodo implementato nel file heap.cpp.
Non riesco a capire l'errore perché è come se mi includesse più roba. Vi posto il codice:




main.cpp

#include <iostream>

#ifndef _STDLIB_H_
#include <stdlib.h>
#endif

#ifndef Heap_h
#include "heap.cpp"
#endif


using namespace std;

//int getParent(int * ptrArray,int iElementPos);



int main(int argc, char *argv[])
{

srand(time(0));
Heap h;



int i;
int j;
/* int arrT[MAX_ARRAY];
for(i=1; i < MAX_ARRAY+1; i++)
{
// arrT[i]= MIN_RAND + rand() % MAX_RAND;
// j=getParent(arrT,i);

cout << "Figlio: " << i<< " " << arrT[i] << endl;
cout << "Padre: " << j << " " << arrT[j] << endl;
cout << endl;
cout << endl;
*/

// }


system("PAUSE");
return 0;
}

heap.cpp

#ifndef Heap_h
#define Heap_h 1

#ifndef _STDLIB_H_
#include <stdlib.h>
#endif


#define MAX_RAND 1000
#define MIN_RAND 0
#define MAX_ARRAY 10




class Heap{

public:

int arrHeapValues[MAX_ARRAY+1];

Heap( );
void initHeap();
int getParent(int iElementPos);
int getParentPosition(int iElementPos);

};


Heap::Heap( ){

int i;
for (i=1; i < MAX_ARRAY+1; i++){
arrHeapValues[i]= MIN_RAND + rand() % MAX_RAND;
}
}


int Heap::getParent(int iElementPos){

int iParent =0;

if (iElementPos==1){
iParent=1;
}else{
iParent=(int)((iElementPos)/2);
}

return arrHeapValues[iParent];

}

#endif



lasciate perdere le sezioni commentate ora vorrei semplicemente compilare senza ricevere errori. Per adesso la funzione main deve soltanto instanziarmi l'oggetto, quella parte commentata sarà tolta!
Mi date una mano? Di c++ ne capisco poco ma immagino che per una persona con un pò d esperienza questo sia un errore stupido. Io purtroppo sul web non ho trovato niente che facesse al caso mio...

oregon
07-05-2007, 21:02
Questa linea

#include "heap.cpp"

non va bene ...

I file .cpp non devono essere inclusi ... solamente i file .h vanno inclusi ...

Nunkij
07-05-2007, 21:16
grazie mille ora funziona!!!

Nunkij
07-05-2007, 21:18
E se volessi includere un file con tutte le costanti come posso fare? Ho provato ad usare EXTRN ma mi vuole il tipo e se vuole il tipo la costante non me la considera valida!

oregon
07-05-2007, 21:24
Le costanti vanno inserite nei file .h, ad esempio

#define MAX_RAND 1000

e i file include .h nei file .cpp

Nunkij
07-05-2007, 21:46
Ok grazie mille!

Loading