Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it L'avatar di toraz
    Registrato dal
    Nov 2001
    Messaggi
    263

    [C++] Probema con programma su più più file sorgente

    dunque... sto cercando di capire come fare a compilare un programma diviso su più file sorgente con gcc... io ho tr3 file che sono main.C stack.C e stack.h...

    main.C contiene la funzione main e è così fatto
    codice:
    #include <iostream>
    #include "stack.h"
    
    using namespace std;
    
    int main()
    {
      
      // richiama le funzioni definite in stack.h
      
      return 0;
    }
    stack.h contiene la definizione della classe Stack
    codice:
    #ifndef STACK_H
    #define STACK_H
    
    class Stack
    {
      public:
        ...
        ...
    
      private:
        ...
        ...
    };
    
    #endif
    e per finire in stack.C ci sono le definizione delle funzioni membro di Stack
    codice:
    #include <iostream>
    #include "stack.h"
    
    using namespace std;
    
    ...
    ...
    ...
    per compilarli faccio così
    codice:
    $ g++ -c main.C
    $ g++ -c stack.C
    e fin qua non ho problemi e ottengo i due file main.o e stack.o poi per creare l'eseguibile uso il comando
    codice:
    g++ main.o stack.o
    che mi restituisce l'errore
    codice:
    main.o(.text+0x17): In function `main':
    : undefined reference to `Stack<int, (int)10>::Stack[in-charge]()'
    main.o(.text+0x2a): In function `main':
    : undefined reference to `Stack<int, (int)10>::push(int)'
    main.o(.text+0x35): In function `main':
    : undefined reference to `Stack<int, (int)10>::display() const'
    collect2: ld returned 1 exit status
    e ovviamente non crea l'eseguibile... quello che non mi riesce di capire è... dov'è l'errore?!? ovvero ho sbagliato qualcosa nella strutturazione dei file o ho sbagliato coi comandi di compilazione?!?

  2. #2
    Utente di HTML.it
    Registrato dal
    Aug 2003
    Messaggi
    311
    da quello che vedo mi sembra cha la classe Stack sia parametrica (template), in questo caso devi mettere sia la dichiarazione che la definizione nello stesso file stack.h (niente .c quindi)

  3. #3
    Utente di HTML.it L'avatar di toraz
    Registrato dal
    Nov 2001
    Messaggi
    263
    grazie mille per la risposta anzitutto... ma ovviamente qualche dubbio mi rimane

    1. se invece non fosse stato un template ma una classe non parametrizzata sarebbe stato giusto come ho strutturato e compilato i file?!?

    2. se la risposta alla prima domanda è si... perchè nel caso di una classe "normale" si può dividere il sorgente in quel modo e nel caso di un template no?!?

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.