Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2009
    Messaggi
    33

    [C++]Problema doppio puntatore

    Salve,
    come da titolo ho un problema quando provo a passare un doppio puntatore,
    io ho questa classe:
    codice:
    template <typename T>
    class BinaryNode
    {
    private:
        T key;
        BinaryNode<T>* left;
        BinaryNode<T>* right;
        BinaryNode<T>* parent;
    public:
        T getkey() const { return key; }
        void setkey(T k){ key = k; }
        BinaryNode<T>* getleft() const { return left; }
        void setleft(BinaryNode<T>* l){ left = l; }
        BinaryNode<T>* getright() const { return right; }
        void setright(BinaryNode<T>* r){ right = r; }
        BinaryNode<T>* getparent() const { return parent; }
        void setparent(BinaryNode<T>* p){ parent = p; }
    };
    e questo metodo:
    codice:
    template <typename T>void BinarySearchTree<T>::insert(BinaryNode<T>** node, T key)
    {
        if (*node == NULL)
        {
            *node = this->newNode(key);
            cout << "-Creating... " << (*node)->getkey() << endl << endl;
        }
        else
        {
            if (key <= (*node)->getkey())
            {
                cout << "<-Left" << endl;
                insert(&(*node)->left, key); //in questa linea mi da errore
                (*node)->getleft()->setparent(*node);
            }
            else
            {
                cout << "Right->" << endl;
                insert(&(*node)->right, key); //in questa linea mi da errore
                (*node)->getright()->setparent(*node);
            }
        }
    }
    Solo che quando vado a compilare mi da errore nella linea commentata
    questo errore:
    1>------ Inizio compilazione: Progetto: [ASD]Vocabolario, Configurazione: Debug Win32 ------
    1> main.cpp
    1>c:\users\davide\dropbox\davide\[asd]\progetto\[asd]vocabolario\[asd]vocabolario\classi.h(124): error C2102: '&' richiede un l-value
    1> c:\users\davide\dropbox\davide\[asd]\progetto\[asd]vocabolario\[asd]vocabolario\classi.h(113): durante la compilazione della classe modello, funzione membro 'void BinarySearchTree<std::string>::insert(BinaryNode<T > **,T)'
    1> with
    1> [
    1> T=std::string
    1> ]
    1> c:\users\davide\dropbox\davide\[asd]\progetto\[asd]vocabolario\[asd]vocabolario\classi.h(104): vedere il riferimento all'istanza del modello di funzione 'void BinarySearchTree<std::string>::insert(BinaryNode<T > **,T)' in corso di compilazione
    1> with
    1> [
    1> T=std::string
    1> ]
    1> c:\users\davide\dropbox\davide\[asd]\progetto\[asd]vocabolario\[asd]vocabolario\classi.h(103): durante la compilazione della classe modello, funzione membro 'void BinarySearchTree<std::string>::insert(T)'
    1> with
    1> [
    1> T=std::string
    1> ]
    1> c:\users\davide\dropbox\davide\[asd]\progetto\[asd]vocabolario\[asd]vocabolario\main.cpp(25): vedere il riferimento all'istanza del modello di funzione 'void BinarySearchTree<std::string>::insert(T)' in corso di compilazione
    1> with
    1> [
    1> T=std::string
    1> ]
    1> c:\users\davide\dropbox\davide\[asd]\progetto\[asd]vocabolario\[asd]vocabolario\main.cpp(9): vedere il riferimento all'istanza del modello di classe 'BinarySearchTree<std::string>' in corso di compilazione
    1>c:\users\davide\dropbox\davide\[asd]\progetto\[asd]vocabolario\[asd]vocabolario\classi.h(130): error C2102: '&' richiede un l-value
    ========== Compilazione: 0 completate, 1 non riuscite, 0 aggiornate, 0 ignorate ==========
    Qualcuno sa come risolverlo?
    Grazie mille,
    Bye

  2. #2
    prova a dichiarare il puntatore di puntatore con ** e non con un solo asterisco, per es
    codice:
    int **micio_micio;
    tutto si può fare, bisogna solo volerlo
    http://italybrain.altervista.org/

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2009
    Messaggi
    33
    Quote Originariamente inviata da g.b99pm10 Visualizza il messaggio
    prova a dichiarare il puntatore di puntatore con ** e non con un solo asterisco, per es
    codice:
    int **micio_micio;
    No non va, cmq ho capito il problema, ma non so come risolverlo, praticamente nell'espressione:
    codice:
    insert(&(*node)->getleft(), key);
    insert(&(*node)->getright(), key);
    è richiesto un l-value, ovvero un valore non temporaneo, mentre la getleft ritorna un valore che è temporaneo.
    Ma non so come fixare questa cosa

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.