• Benvenuto in Making Videogames!
  • Dai sfogo alla tua fantasia!
  • Crea il tuo Videogioco!
Benvenuto ospite! Login Registrati




Valutazione discussione:
  • 0 voto(i) - 0 media
  • 1
  • 2
  • 3
  • 4
  • 5
Liste collegate e strutture - "error: does not name a type"
#1
Scusate se vi importuno ancora una volta con i miei problemucoli con SDL ma i tizi che importuno di solito non mi possono aiutare quindi vi chiedo di avere un po' di pazienza e se potete e volete magari aiutarmi, visto che è da troppo che questo problema va avanti e non riesco proprio a capire perché. Ho creato una nuova discussione sia perché l'altra era risolta, sia perché magari può essere d'aiuto a qualcuno forse.

Sto facendo una lista collegata (linked list, no?) e per farla servono le strutture nodo. Ho visto vari video in proposito, ma i problemi sorgono durante la compilazione. Fuori e prima del main ho creato le strutture:
Codice:
struct nodo{
    proiettile* pro;
    struct nodo* precedente;};

struct nodo* testa;
struct nodo* coda;
struct nodo* temp;
struct nodo* n;

testa->precedente=NULL;
coda->precedente=testa;
L'errore è sulle ultime due righe:
Citazione:speranza.cpp:81:1: error: ‘testa’ does not name a type
speranza.cpp:82:1: error: ‘coda’ does not name a type

Se fosse d'aiuto metterei tutto il codice, ditemelo se serve; vi ringrazio molto.
 
Rispondi
#2
Se lo stai facendo in C++ (lo deduco da speranza.cpp) è più conveniente implementarle con una classe, volendo puoi anche usare std::list, ma implementartene una tua è un buon esercizio. In C++ non è necessario (anche se non è un errore) ripetere la keyword struct quando crei un istanza di quella struttura, ad esempio:
Codice:
// queste righe
struct nodo* testa;
struct nodo* coda;
struct nodo* temp;
struct nodo* n;

// le puoi sostituire con questa
nodo *testa, *coda, *temp, *n;

Comunque noto che stai procedendo nel modo sbagliato, ammettendo di voler procedere a mo dì C, dovresti creare una serie di funzioni che ti permettano di aggiungere, rimuovere e cercare un elemento della lista. Dalle ultime due righe che hai postato immagino che tutto questo lo stai facendo a mano.

Se dovessi tirare a indovinare direi che l'errore sta nel fatto che le variabili globali le hai dichiarate in un file e stai cercando di usarle in un altro file. In caso fosse così devi servirti della keyword extern.
In caso non fosse così devi postare un pezzo in più di codice e scrivere su che riga ti esce l'errore (l'81esima e l'82esima del file speranza.cpp).
 
Rispondi
#3
Ah, grazie della risposta! In effetti potrei compattare tutto il blocco della creazione delle struct in quella forma...
Comunque queste due sono rispettivamente l'ottantunesima e l'ottantaduesima riga:
Codice:
testa->precedente=NULL;
coda->precedente=testa;
Sto procedendo su un solo file e la funzione per l'aggiunta di un elemento alla lista è successiva.
Hu forse è perché il mio file è composto in questo modo:
  • Librerie
  • Variabili
  • Prototipo di una funzione
  • Classe proiettile
  • Costruttore
  • Funzioni della classe
  • Distruttore
  • Strutture (il blocco di codice che ho messo prima)
  • Il prototipo funzione per aggiungere un nodo alla lista
  • main
  • La funzione
  • Funzione per aggiungere nodi alla lista
Forse avrei dovuto mettere le cose in un ordine diverso?
 
Rispondi
#4
Ah ok, adesso ho capito, il codice di prima è un unico blocco che parte intorno alla linea 80. Pensavo che l'avessi scritto in quel modo giusto renderlo comprensibile sul forum, ma in realtà fosse una cosa del genere:
Codice:
// verso le prime righe
struct nodo{
    proiettile* pro;
    struct nodo* precedente;};

struct nodo* testa;
struct nodo* coda;
struct nodo* temp;
struct nodo* n;

// altre righe di codice

testa->precedente=NULL; // riga 81
coda->precedente=testa;  // riga 82

Comunque ora penso di aver capito il problema.
La riga 81 e la riga 82 devono stare all'interno di una funzione, per risolvere basta che le copi all'interno del main. Ricordati che stai usando dei puntatori (sicuro che ti servano dei puntatori?), quindi prima di utilizzarli devono puntare da qualche parte.
 
Rispondi
#5
Citazione:Ricordati che stai usando dei puntatori
Ah! Grazie! In effetti li stavo dando per strutture vere e proprie!
Citazione:La riga 81 e la riga 82 devono stare all'interno di una funzione
Come mai? È che mi sembra strano, tutto qua... per sapere...

Comunque grazie moltissime, sono riuscito a combinare qualcosa! ^_^ Ti erigo metaforicamente una statua "Al mio salvatore" XD
 
Rispondi
#6
(30-07-2013, 04:27 AM)Synlu Ha scritto: Come mai? È che mi sembra strano, tutto qua... per sapere...
Le uniche operazioni (nello scope globale) che puoi fare su una variabile globale sono la dichiarazione e l'inizializzazione (da non confondere con l'assegnazione). Tutto il resto lo devi fare all'interno di un altro scope (all'interno di una funzione, di una classe, di una struttura, di un metodo, etc.).
Codice:
int a;          // dichiarazione - ok
int b = 10;  // inizializzazione - ok
a = 5;        // assegnazione - no

Eccetto casi particolari le variabili globali non andrebbero proprio usate.
 
Rispondi
#7
Grazie tantissime!!! Vedrò di mettere solo le variabili globali che mi servono, sentirete ancora parlare di me, alla prossima!
 
Rispondi
  


Discussioni simili
Discussione Autore Risposte Letto Ultimo messaggio
  [Source] Gestione liste dinamiche ManHunter 0 843 16-05-2011, 01:43 PM
Ultimo messaggio: ManHunter

Vai al forum:


Browsing: 1 Ospite(i)