Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1

    [C++] Liste: problema con gli iteratori

    Ciao
    Avete presente le liste?
    #include <list>

    bhe, sul mio manuale, c'e' scritto che per dichiarare un iteratore di una lista, si fa:

    list<TIPO>::iterator NOME = ...;

    il problema, e' che quando lo faccio mi da errore... se tolgo <TIPO>, l'errore scompare.

    Come mai?

    Grazie
    ciao
    #exclude <windows.h>
    Powered by Gentoo GNU/Linux
    Cos'e' l'impossibile se non una questione di tempo?
    Riesumare i post vecchi non e' sbagliato, e' una risposta o la continuazione di un thread. Meglio riesumare che creare di nuovi :]

  2. #2
    Posta il codice e l`errore .. se no mi viene in mente "Che razza di compilatore hai?".

  3. #3
    direi uno dei migliori compilatori: GCC
    Aspetta, il codice lo ho su Linux, ora sono su win
    #exclude <windows.h>
    Powered by Gentoo GNU/Linux
    Cos'e' l'impossibile se non una questione di tempo?
    Riesumare i post vecchi non e' sbagliato, e' una risposta o la continuazione di un thread. Meglio riesumare che creare di nuovi :]

  4. #4
    CODICE ED ERRORI
    codice:
    class iFace
    {
      ...
      list<Cliente>	client;
      ...
      void newClient();
    };
    
    void iFace::newClient()
    {
      ...
      list<Cliente>::iterator p = client.begin();
      ...
    }
    
    ERRORI:
    
    iface.cpp: In member function `void iFace::newClient()':
    iface.cpp:33: parse error before `>' token
    iface.cpp:36: `p' undeclared (first use this function)
    iface.cpp:36: (Each undeclared identifier is reported only once for each function it appears in.)

    Non capisco quale sia il problema
    Qualcuno ci capisce?

    Grazie
    ciao
    #exclude <windows.h>
    Powered by Gentoo GNU/Linux
    Cos'e' l'impossibile se non una questione di tempo?
    Riesumare i post vecchi non e' sbagliato, e' una risposta o la continuazione di un thread. Meglio riesumare che creare di nuovi :]

  5. #5
    L`errore lo da` su 'Cliente' non su '::iterator'.

  6. #6
    infatti, non mi sembra di aver detto che da un errore su ::iterator... ho detto che dava errore e basta.

    Il problema e' che Cliente, e' OK, poiche esattamente nella stessa classe, nei membri privati ho messo:

    list<Cliente> client;

    Onestamente non capisco perche' da questo problema... prima posso usarlo, poi non posso piu'...

    Ah... non e' che magari non posso perche' nella classe cliente ho un'altra lista?

    Non so... potrebbe essere una cretinata, me meglio farvi presente questo dettaglio...

    grazie
    ciao
    #exclude <windows.h>
    Powered by Gentoo GNU/Linux
    Cos'e' l'impossibile se non una questione di tempo?
    Riesumare i post vecchi non e' sbagliato, e' una risposta o la continuazione di un thread. Meglio riesumare che creare di nuovi :]

  7. #7
    che nervoso che nervoso che nervoso...
    nella dichiarazione dei membri privati, ho messo l'iteratore che devo usare.

    Adesso il codice non e' piu
    codice:
    class iFace
    {
      ...
      list<Cliente>	client;
      ...
      void newClient();
    };
    
    void iFace::newClient()
    {
      ...
      list<Cliente>::iterator p = client.begin();
      ...
    }
    Ma e'
    codice:
    class iFace
    {
      ...
      list<Cliente>	client;
      list<Cliente>::iterator p;
      ...
      void newClient();
    };
    
    void iFace::newClient()
    {
      ...
      p = client.begin();
      ...
    }
    Adesso tutto funziona alla perfezione, e non mi da errori.
    Pero' mi da sui nervi poiche' non capisco perche' prima di dava errori...

    bho
    ciao
    #exclude <windows.h>
    Powered by Gentoo GNU/Linux
    Cos'e' l'impossibile se non una questione di tempo?
    Riesumare i post vecchi non e' sbagliato, e' una risposta o la continuazione di un thread. Meglio riesumare che creare di nuovi :]

  8. #8
    Perfetto, adesso il problema mi fa arrabbiare ancora di piu:

    Perche' COSI' FUNZIONA:
    p++;

    mentre COSI' NON FUNZIONA
    p += 1;

    ????

    l'errore e':

    iface.h: In member function `void iFace::delClient(short unsigned int)':
    iface.h:58: no match for `std::_List_iterator<Cliente, Cliente&, Cliente*>& += int' operator

    Ovviamente non potendo fare
    p += 1;
    non posso saltare ad una posizione qualsiasi tipo:
    p += N;

    ma devo fare un cavolo di ciclo for:
    for (int i = 0; i < N; i++, p++);

    Mi viene da piangere.
    Ciao
    #exclude <windows.h>
    Powered by Gentoo GNU/Linux
    Cos'e' l'impossibile se non una questione di tempo?
    Riesumare i post vecchi non e' sbagliato, e' una risposta o la continuazione di un thread. Meglio riesumare che creare di nuovi :]

  9. #9
    Non ha senso implementare l`accesso casuale per una linked list. Esistono vector e deque per questo scopo, e infatti l`operatore += esiste solo per questo tipo di contenitori.

    Altra cosa: usa il pre-incremento (pre-decremento). E` implementato in maniera piu` efficiente.

  10. #10
    si si...
    so cos'e' il pre-incremento, e anche il pre decremento...

    hai ragione... sono un pirla.
    Avevo dimenticato che sono ad accesso sequenziale le liste...

    e adesso che guardo meglio, sul mio man non usa +=!

    ok ok
    ho capito l'errore
    grazie
    ciao
    #exclude <windows.h>
    Powered by Gentoo GNU/Linux
    Cos'e' l'impossibile se non una questione di tempo?
    Riesumare i post vecchi non e' sbagliato, e' una risposta o la continuazione di un thread. Meglio riesumare che creare di nuovi :]

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.