Programma diviso in 3 file

di il
1 risposte

Programma diviso in 3 file

Salve ragazzi.. Ho scritto un semplice programma di ordinamento tramite bubblesort implementato con le classi. Il programma funzione e non da problemi. Succesivamente ho provato a dividere il programma in 3 file, ossia il main.cpp, il file.h con la classe e infine un terzo file .cpp con tutte i metodi della classe.

Il programma non gira. Il problema è che ho provato a passare i 3 file ad un mio amico e sul suo pc parte e gira correttamente.. Come è possibile una cosa del genere??

Ecco il codice:

main.cpp
#include <iostream>
#include "classe.h"
using namespace std;

int main()
{
    BUBBLESORT x;
    int n;
    
    cout<<"Inserisci il numero di elementi dell'array: "; //definizione num elementi
    cin>>n;
    
    x.definiscielem(n);
    x.allocamemoria();
    x.inseriscielem();
    x.visualizza();
    x.bubble();
    x.visualizza();  
    
    system("PAUSE");
    return 0;
}
classe.h
class BUBBLESORT
{
      private:
              int *array;
              int elem;
      public:
             BUBBLESORT(){int elem=0;};
             ~BUBBLESORT(){};
             void bubble();
             void scambia(int &,int &);
             void allocamemoria();
             void visualizza();
             void inseriscielem();
             void definiscielem(int);
};
classe.cpp
#include <iostream>
#include "classe.h"
using namespace std;

void BUBBLESORT:: inseriscielem()
{
     for(int i=0;i<elem;i++)
     {
         cout<<"Inserisci "<<i+1<<"-esimo elemento: ";
         cin>>array[i];
     }
     cout<<endl<<endl;
}

void BUBBLESORT:: definiscielem(int n)
{
     elem=n;
}

void BUBBLESORT:: visualizza()
{
     for(int i=0;i<elem;i++)
    {
        cout<<array[i]<<" ";
    } 
}

void BUBBLESORT:: allocamemoria()
{
     array=new int[elem];
     if(array==NULL)
     {
         cout<<"Memoria non allocata correttamente!!\n\n";
         system("pause");
         exit(0);
     }
}

void BUBBLESORT:: bubble() //confronto a due a due tutti gli elementi e li scambio se non sono ordinati
{     
     int ultimo=elem;
     
     while(ultimo>0)
     {
         for(int i=0;i<ultimo-1;i++) //i arriva fino a ultimo-1 perchè così posso confrontarlo con l'ultimo
         {
             if(array[i]>array[i+1])
             {
                 scambia(array[i],array[i+1]);
             }
         }
         ultimo--;
     }
}

void BUBBLESORT:: scambia(int &a, int &b) //passaggio per alias
{
     int t;
     t=a;
     a=b;
     b=t;
}   
Mi da degli strani errori:

[Linker error] undefined reference to `BUBBLESORT::definiscielem(int)'
[Linker error] undefined reference to `BUBBLESORT::allocamemoria()'
[Linker error] undefined reference to `BUBBLESORT::inseriscielem()'
[Linker error] undefined reference to `BUBBLESORT::visualizza()'
[Linker error] undefined reference to `BUBBLESORT::bubble()'
[Linker error] undefined reference to `BUBBLESORT::visualizza()'

Non riesco proprio a capire il perchè.. Mercoledì molto probabilmente dovrò spiegarlo a tutti in aula e non so dove sbattere la testa..

1 Risposte

  • Re: Programma diviso in 3 file

    Probabilmente non hai incluso il tuo oggetto (classe.obj o classe.o) nella fase di link.
    Io non conosco il tuo ambiente (vedo win dalla system). dovresti cercare nelle opzioni di progetto e inserire la tua classe. in pratica devi far compilare classe creando un oggetto per poi includerlo al tuo main. sono 2 compilazioni ed 1 link
Devi accedere o registrarti per scrivere nel forum
1 risposte