Creare Videogiochi - Game Developer
Liste collegate e strutture - "error: does not name a type" - Versione stampabile

+- Creare Videogiochi - Game Developer (https://www.making-videogames.net/giochi)
+-- Forum: Programmazione (https://www.making-videogames.net/giochi/Forum-Programmazione)
+--- Forum: Programmazione in C C++ e C# (https://www.making-videogames.net/giochi/Forum-Programmazione-in-C-C-e-C)
+--- Discussione: Liste collegate e strutture - "error: does not name a type" (/thread-Liste-collegate-e-strutture-error-does-not-name-a-type)



Liste collegate e strutture - "error: does not name a type" - Synlu - 29-07-2013

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.


RE: Liste collegate e strutture - "error: does not name a type" - steve - 29-07-2013

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).


RE: Liste collegate e strutture - "error: does not name a type" - Synlu - 30-07-2013

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?


RE: Liste collegate e strutture - "error: does not name a type" - steve - 30-07-2013

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.


RE: Liste collegate e strutture - "error: does not name a type" - Synlu - 30-07-2013

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


RE: Liste collegate e strutture - "error: does not name a type" - steve - 30-07-2013

(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.


RE: Liste collegate e strutture - "error: does not name a type" - Synlu - 31-07-2013

Grazie tantissime!!! Vedrò di mettere solo le variabili globali che mi servono, sentirete ancora parlare di me, alla prossima!