Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it L'avatar di afrappe
    Registrato dal
    Jan 2002
    Messaggi
    1,197

    [c++] utilizzare una struct globalmente

    ho una struttura del genere nel file globale.h
    codice:
    struct strutturaposizione
    {
           float x_pos; 
           float y_pos;
           int gradi;    
    };
    ora vorrei usare questa struttura in qualsiasi punto del programma, un'esempio:
    codice:
    //dichiarazione della classe
    #include "main.h"
    class elemento_base
    {
     public:
            elemento_base();
            ~elemento_base();
                    
            void scrivi_coord(strutturaposizione);
            void leggi_coord();      
                    
            
     private:
            float _x,_y;
            int _incl; 
                 
    };
    codice:
    //implementazione della classe:
    #include <cstdlib>
    #include <iostream>
    #include <cstdio>  //aggiunto per la funzione printf, per scrivere formattato
    #include "elemento_base.h"
    
    using namespace std;
    
    
    //---------implementazione metodi-------------
    void elemento_base::leggi_coord()
    {
          
    }
    
    void elemento_base::scrivi_coord(strutturaposizione myStrut)
    {
         
    }
    
    //---------costruttore e distruttore-----------
    // non hanno il void
    elemento_base::elemento_base()
    {
         std::cout << "classe base" << endl;
    }
    elemento_base::~elemento_base()
    {
         
    }
    come potete notare la voglio usare come parametro di una funziona, ma nonostante abbia icluso il file globale.h

    ottengo errore di compilazione : [Linker error] undefined reference to `elemento_base::scrivi_coord()'

  2. #2
    alcune osservazioni

    //dichiarazione della classe
    #include "main.h"
    ....
    normalmente non è opporturno include main.h nei file delle classi del progetto.

    Inoltre non vedo l'include dell'header della classe nel file di implementazione di questa.

    Infine, sei sicuro di compilare tutti i file?
    che compilatore usi e come compili?

    ciao
    sergio

  3. #3
    Inoltre l'errore che citi non ha nulla a che vedere con la struct... piuttosto il problema sembra essere di mancata compilazione e/o linking di uno dei file sorgente.
    Amaro C++, il gusto pieno dell'undefined behavior.

  4. #4
    Utente di HTML.it L'avatar di afrappe
    Registrato dal
    Jan 2002
    Messaggi
    1,197
    l'inclusione dell'header c'e'(è l'ultimo include nell'ultimo blocco di codice/file che ho postato)
    #include "elemento_base.h"

    (non ho riportato il nome del file elemento_base.h che si riferisce al secondo blocco di codice)


    il compilatore uso quello distribuito assieme a DevC++ credo sia GCC

    compilo tramite l'IDE con l'opzione "compila" e NON con "compila file corrente" quindi presumo compili tutti i file del progetto

    dove mi conviene dichiarare la struct per avere una visibilita globale a tutto il progetto?

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,472
    Ma il main.cpp cosa contiene?

  6. #6
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381

    Re: [c++] utilizzare una struct globalmente

    Ma globale.h è incluso in main.h? Perchè altrimenti nella dichiarazione dove pesca la dichiarazione il compilatore?

    Originariamente inviato da afrappe
    [code]
    ora vorrei usare questa struttura in qualsiasi punto del programma, un'esempio:
    codice:
    //dichiarazione della classe
    #include "main.h"
    // vedi post
    class elemento_base
    {
     public:
            elemento_base();
            ~elemento_base();
                    
            void scrivi_coord(strutturaposizione);
            void leggi_coord();      
                    
            
     private:
            float _x,_y;
            int _incl; 
                 
    };

  7. #7
    Utente di HTML.it L'avatar di afrappe
    Registrato dal
    Jan 2002
    Messaggi
    1,197
    chiedo umilmente scusa, ho sbagliato a copiare, il main.h non esiste ma è globale.h(il file dove è dichiarata la struttura), questa la includo all'interno di (elemento_base.h)
    codice:
    //dichiarazione della classe
    #include "globale.h"
    class elemento_base
    {
     public:
            elemento_base();
            ~elemento_base();
                    
            void scrivi_coord(strutturaposizione);
            void leggi_coord();      
                    
            
     private:
            float _x,_y;
            int _incl; 
                 
    };

    e poi ho il file di implementazione (elemento_base.cpp)
    codice:
    //implementazione della classe:
    #include <cstdlib>
    #include <iostream>
    #include <cstdio>  //aggiunto per la funzione printf, per scrivere formattato
    #include "elemento_base.h"
    
    using namespace std;
    
    
    //---------implementazione metodi-------------
    void elemento_base::leggi_coord()
    {
          
    }
    
    void elemento_base::scrivi_coord(strutturaposizione myStrut)
    {
         
    }
    
    //---------costruttore e distruttore-----------
    // non hanno il void
    elemento_base::elemento_base()
    {
         std::cout << "classe base" << endl;
    }
    elemento_base::~elemento_base()
    {
         
    }

  8. #8
    C sono molti modi per rendere una struct visibile a tutto il programma ma quello che io preferisco è rendere la struct in questione una libreria ed includerla all'interno del programma nella seguente maniera
    #include 'esempio.h';
    come daltronde si usa il cout,il cin etc etc
    ps.la struct/libreria va salvata nella stessa cartella del programma che la include.
    Spero di esserti stato utile
    Zao
    drui

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.