PDA

Visualizza la versione completa : [C++] class() !?


Ippo343
19-11-2009, 02:04
Ciao a tutti!

A scopo puramente sperimentale e formativo, stavo sperimentando per vedere se fossi in grado di scrivermi una coda linkata. Si, una coda. Tanto per provare :P

Ho usato due classi template, una per i "nodi" della coda e una per la coda in sè. Scrivo i metodi push e pop, sembra tutto a posto. Allora nel mio main faccio un piccolo test:



int main()
{
cout << "Creating the queue...\n";

LinkedQueue<int> queue();

cout << "Pushing 10 elements...\n";

for (int i = 0; i < 10; i++)
{
linkedNode<int> node(new int(i));

queue.Push(&node);
}

return 0;
}


Il compilatore si rifiuta: arrivato al ciclo for mi da errore. Per la richiesta di "Push" all'interno della variabile "queue", la quale "is of non-class type LinkedQueue<int>()".

Ora, io stavo già per scrivervi e chiedere aiuto. Poi fortunatamente ho avuto l'idea (non so come!) di togliere quelle due parentesi nella dichiarazione. Era tutto lì il problema.

Ora, il problema è risolto e quindi capirò se i moderatori lo chiuderanno. Ma il dubbio rimane... se dichiaro queue così:



LinkedQueue<int> queue();


qual'è il suo tipo? Ho capito che è LinkedQueue<int>(), ma che cosa rappresenta? Cioè, se è un tipo distinto dalla sua controparte senza parentesi, perchè il compilatore non mi ha impedito di dichiararla?

:confused:

bitman
19-11-2009, 10:30
con le parentesi hai dichiarato una funzione senza corpo e senza parametri chiamata "queue" che ha valore di ritorno LinkedQueue<int>. o sbaglio?

Ippo343
19-11-2009, 14:00
Dannazione! Hai ragione!

Non ho MAI dichiarato una funzione all'interno di un'altra... fino al punto che mi ero persino dimenticato di poterlo fare :P

MItaly
19-11-2009, 14:03
In C++ non si può dichiarare una funzione dentro a un'altra, fermo restando che togliendo le parentesi risolvi.

Ippo343
19-11-2009, 14:06
Ah. E allora se non era una funzione... cosa ho dichiarato? :master:

MItaly
19-11-2009, 14:47
Ho ricontrollato i miei testi sacri e ho visto che in effetti si può dichiarare una funzione dentro un'altra funzione; quello che non si può fare (e con cui mi sono confuso) è definire una funzione dentro un'altra funzione. Chiedo scusa per l'equivoco.

Ippo343
19-11-2009, 14:53
No problem ;)

Quali sono i tuoi testi sacri? Mi sa che mi farebbe bene dargli un'occhiata ^^'

MItaly
19-11-2009, 15:46
Sul C++ in realtà non ho nulla di molto sacro, giusto lo Schildt (che per mia stessa ammissione non è un granché, ma ai tempi in cui l'ho comprato non lo sapevo); lì c'è scritta la questione dell'impossibilità di definire una funzione in un'altra funzione (il che secondo alcuni tarpa le ali al C++, tanto che alcuni hanno inventato le lamda functions per ovviare a questo problema). Poi ho verificato che si potessero dichiarare le funzioni in altre funzioni con il g++, e per controllare che non fosse giusto una stramberia del g++ ho dato un'occhiata veloce su internet.
I miei testi veramente sacri sono su Unix (Rochkind), Win32 (Rector Newcomer) e sistemi operativi (Tanenbaum).

Loading