Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16
  1. #1

    [C++] Undefined reference

    Quando eseguo il mio Makefile ottengo il seguente errore:
    C:\Users\Io\Desktop>mingw32-make
    g++ main.cc
    C:\Users\Io\AppData\Local\Temp/cc4Sgaaa.o(.text+0x185):main.cc: undefined reference to `Pezzo::Pezzo(Colore)'
    collect2: ld returned 1 exit status
    mingw32-make: *** [main.o] Error 1
    file main.cc:
    codice:
    #include <iostream>
    
    #include "Pezzo.hh"
    
    using namespace std;
    
    int main () {
    Pezzo *pino=new Pezzo(NERO);
    }
    file Pezzo.hh:
    codice:
    enum Colore {BIANCO, NERO};
    
    class Pezzo {
    
     private:
    
     protected:
    
        Colore _colore;
    
     public:
    
        Pezzo (Colore colore);
        ~Pezzo ();
        Colore getColore ();
    
    };
    Non capisco perchè mi dia quell'errore...mi dareste una dritta?

  2. #2
    Utente di HTML.it L'avatar di minomic
    Registrato dal
    Nov 2010
    Messaggi
    635
    Ma hai creato il file sorgente della classe Pezzo dove inserisci la definizione del costruttore? Perché io ho provato e non mi dà alcun errore... Un esempio basilare è

    codice:
    #include "pezzo.h"
    
    
    Pezzo::Pezzo(Colore c) {
        _colore = c;
    }

  3. #3
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    In effetti manca il file Pezzo.cc
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  4. #4
    Scusate, il file Pezzo.cc c'è ma mi ero dimenticato di postarlo.
    file Pezzo.cc:
    codice:
    #include "Pezzo.hh"
    
    Pezzo::Pezzo (Colore colore) {
        _colore=colore;
    }
    
    Pezzo::~Pezzo () {}
    
    Colore Pezzo::getColore () {
        return _colore;
    }

  5. #5
    Utente di HTML.it L'avatar di minomic
    Registrato dal
    Nov 2010
    Messaggi
    635
    Ok, allora il problema è nel makefile: devi compilare tutti i file sorgente. Quindi potresti anche scrivere

    codice:
    g++ -Wall -o nome_applicazione *.cc

  6. #6
    Grazie, con il comando che mi hai dato tu funziona tutto a regola d'arte.
    A questo punto posto anche il makefile, visto che l'errore deve essere lì.
    file Makefile:
    codice:
    nome_applicazione : main.o Pezzo.o
        g++ main.o Pezzo.o
        
    main.o : main.cc
        g++ main.cc
        
    Pezzo.o : Pezzo.cc
        g++ Pezzo.cc

  7. #7
    Utente di HTML.it L'avatar di minomic
    Registrato dal
    Nov 2010
    Messaggi
    635
    Dunque... non vorrei dire stupidaggini perché al momento non ho la possibilità di provarlo, però secondo me quando crei i file .o devi scrivere

    codice:
    g++ -c main.cc
    e stessa cosa per Pezzo.cc. Inoltre ti consiglio di mettere sempre -Wall che ti stampa tutti i warning.

  8. #8
    Ottimo! Il problema era proprio quello.
    Ho anche aggiunto il -Wall.
    Non mi è chiaro un particolare, anche se si tratta di una finezza: l'eseguibile che viene creato si chiama a.exe anzichè nome_applicazione.exe, come mai?

  9. #9
    Utente di HTML.it L'avatar di minomic
    Registrato dal
    Nov 2010
    Messaggi
    635
    Quando generi l'eseguibile devi scrivere

    codice:
    g++ -o nome_che_vuoi tutti_i_file_._o

    Per come hai scritto tu nel tuo makefile, "nome_applicazione" è solo un'etichetta ma non viene mai passata a g++.

  10. #10
    Approfitto del fatto di aver incluso dei frammenti di codice per chiedere una cosa riguardo la definizione del tipo enumerativo.
    All'inizio del file Pezzo.hh ho definito il tipo enumerativo Colore, vorrei che questo tipo fosse visibile in tutto il mio codice sorgente (che dovrà essere composto da altre classi oltre a quelle che ho riportato).
    Allo stesso tempo non devo definire il tipo Colore in ogni file sorgente altrimenti per via dei vari include prima o poi comincerò ad ottenere errori della serie "tipo Colore già definito".
    Qual'è un buon compromesso per risolvere il problema?

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 © 2024 vBulletin Solutions, Inc. All rights reserved.