Visualizzazione dei risultati da 1 a 8 su 8

Discussione: [C++] class() !?

  1. #1
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    475

    [C++] class() !?

    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:

    codice:
    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ì:

    codice:
    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?

    "Let him who has understanding reckon the number of the beast, for it is a human number.
    Its number is rw-rw-rw-."

  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2006
    Messaggi
    59
    con le parentesi hai dichiarato una funzione senza corpo e senza parametri chiamata "queue" che ha valore di ritorno LinkedQueue<int>. o sbaglio?

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    475
    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
    "Let him who has understanding reckon the number of the beast, for it is a human number.
    Its number is rw-rw-rw-."

  4. #4
    In C++ non si può dichiarare una funzione dentro a un'altra, fermo restando che togliendo le parentesi risolvi.
    Amaro C++, il gusto pieno dell'undefined behavior.

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    475
    Ah. E allora se non era una funzione... cosa ho dichiarato? :master:
    "Let him who has understanding reckon the number of the beast, for it is a human number.
    Its number is rw-rw-rw-."

  6. #6
    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.
    Amaro C++, il gusto pieno dell'undefined behavior.

  7. #7
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    475
    No problem

    Quali sono i tuoi testi sacri? Mi sa che mi farebbe bene dargli un'occhiata ^^'
    "Let him who has understanding reckon the number of the beast, for it is a human number.
    Its number is rw-rw-rw-."

  8. #8
    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).
    Amaro C++, il gusto pieno dell'undefined behavior.

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.