Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    [C++] definizioni multiple

    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:

    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...
    I dilettanti costruirono l'Arca, i professionisti il Titanic!

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Questa linea

    #include "heap.cpp"

    non va bene ...

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

  3. #3
    grazie mille ora funziona!!!
    I dilettanti costruirono l'Arca, i professionisti il Titanic!

  4. #4
    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!
    I dilettanti costruirono l'Arca, i professionisti il Titanic!

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Le costanti vanno inserite nei file .h, ad esempio

    #define MAX_RAND 1000

    e i file include .h nei file .cpp

  6. #6
    Ok grazie mille!
    I dilettanti costruirono l'Arca, i professionisti il Titanic!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.