Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 15
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2006
    Messaggi
    106

    [C] Problema dichiarazione array

    Ciao ragazzi,

    ho dichiarato un array di struct in questo modo:

    typedef struct{
    tipoelem elemento;
    posizione successivo;
    }componenteSpazio;

    static componenteSpazio SPAZIO[100];

    Questo array provo ad inizializzarlo con il seguente ciclo for:

    for(int i=0;i<dim-1;i++)
    SPAZIO[i].successivo = i+1;

    l'unico problema è che il compilatore mi restituisce questo errore:
    undefine reference to <nomeClasse>::SPAZIO

    Qualcuno è in grado di darmi gentilmente una mano?

    Ciao e grazie

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Così come l'hai scritto non ci sono problemi ... posta TUTTO il codice, comprese le classi che hai dichiarato ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,589
    a mio parere dovrebbe essere così

    codice:
    typedef struct componenteSpazio{
    tipoelem elemento;
    posizione successivo;
    };
    
    static componenteSpazio SPAZIO[100];
    prova a vedere se funziona

    se vuoi qui c'è un piccolo ripasso...
    http://programmazione.html.it/guide/...pedef-e-union/

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da Scara95
    a mio parere dovrebbe essere così

    codice:
    typedef struct componenteSpazio{
    tipoelem elemento;
    posizione successivo;
    };
    
    static componenteSpazio SPAZIO[100];
    prova a vedere se funziona
    No ... non mi pare sia un consiglio corretto ... cosa c'e' che non ti torna?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2006
    Messaggi
    106
    Così come l'hai scritto non ci sono problemi ... posta TUTTO il codice, comprese le classi che hai dichiarato ...
    Allora:

    nel file lista.h ho:

    class Lista{
    public:

    typedef struct{
    int elemento;
    int successivo;
    }componenteSpazio;

    Lista();

    private:
    static componenteSpazio SPAZIO[100];
    }

    nel file prova.cpp ho:

    Lista::Lista(){
    for(int i=0;i<100;i++)
    SPAZIO[i].successivo = i+1;
    }

    se provo a compilarlo ottengo senza problemi Lista.a.

    quando però all'interno del main faccio:

    Lista l;

    il compilatore mi restituisce "undefine reference to Lista::SPAZIO"

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Perche' e' statico ? Deve essere

    private:
    componenteSpazio SPAZIO[100];


    o qualcosa mi sfugge ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Utente di HTML.it
    Registrato dal
    May 2006
    Messaggi
    106
    è static per fare in modo che oggetti diversi della stessa classe lista possano condividere la stessa risorsa di memoria. Ad ogni modo, se provo a togliere static il programma sembra andarsene in loop.....

  8. #8
    Utente di HTML.it L'avatar di mamo139
    Registrato dal
    May 2005
    residenza
    Londra
    Messaggi
    841
    che compilatore usi?

  9. #9
    Utente di HTML.it
    Registrato dal
    May 2006
    Messaggi
    106
    che compilatore usi?
    Bloodshed Dev-C++

  10. #10
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Il titolo e C ma il listato è C++ il che aumenta la confusione.
    Comunque:
    i membri static vanno esplicitati all'esterno della classe.
    codice:
    class Lista{
    public:
    
    struct componenteSpazio { // il typedef è inutile
    int elemento;
    int successivo;
    };
    
    Lista();
    
    private:
    static componenteSpazio SPAZIO[100];
    };
    
    Lista::componenteSpazio Lista:: SPAZIO[100];
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

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