Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    [c++]usare oggetti con template su altri oggetti

    Ho la classe grafo nel file grafo.h; un metodo di questa classe deve restituirmi un oggetto lista con template,opportunamente implementato e funzionante su un altra libreria:

    #include "nAdiacenti.h"
    #include "listap.h"

    template <class T>

    class Grafo{
    public:
    typedef T tipoelem;
    typedef int posizioneNodo;
    static const int NIL = 0;
    //typedef Lista<
    //typedef int nodo;
    struct nodo{
    tipoelem label;
    bool mark;
    nAdiacenti *listaNodiAdiacenti;
    };
    Grafo();
    Grafo(int);
    //~Grafo();
    //grafo con oggetto;
    void creaGrafo();//sc
    bool grafoVuoto();//sc
    void insNodo(posizioneNodo);//sc
    void insArco(posizioneNodo,posizioneNodo);//sc
    void cancNodo(posizioneNodo);//
    void cancArco(posizioneNodo,posizioneNodo);//sc
    Lista<nodo> adiacenti(podizioneNodo);
    bool esisteNodo(posizioneNodo);//sc
    bool esisteArco(posizioneNodo,posizioneNodo);//sc
    tipoelem leggiNodo(posizioneNodo);//sc
    void scriviNodo(posizioneNodo, tipoelem);//sc

    private:
    nodo *NodiGrafo;
    int MAXNODI;
    posizioneNodo cercaPosLib();


    };
    Il problema è che il solo scrivere così la classe fa apparire un errore strano (si aspetta un ; prima della parentesi) se poi vado a implementare il metodo che come ritorno ha la lista(template<class T>typename Lista<nodo> Grafo<T>::adiacenti(posizioneNodo u)) mi escono tutta una serie di errori stranissimi...chi mi da una mano a capire cosa succede?

  2. #2
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Per il primo problema controlla bene i prototipi e i typedef o mostra il codice di listap.h


    Per il secondo problema, devi specificare che nodo è un tipo annidato.
    template <class T>
    Lista<typename Grafo<T>::nodo> Grafo<T>::adiacenti(posizioneNodo) {
    }

  3. #3
    Funziona,grazie 1000, ma come faccio a chiamare un nuovo oggetto Lista nella libreria stessa?
    infatti se scrivo:
    Lista<nodo> L;
    Non ho errori, ma non appena inizio a far eseguire metodi o a istanziare variabili della classe:
    Lista<nodo>:osizione pos;
    Mi appaiono errori strani...

  4. #4
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Originariamente inviato da cassiosteel
    Il problema è che il solo scrivere così la classe fa apparire un errore strano (si aspetta un ; prima della parentesi)
    Sei tu che parli di errore. Per questo ti ho invitato a postare il codice di Lista.

    Originariamente inviato da cassiosteel
    Non ho errori, ma non appena inizio a far eseguire metodi o a istanziare variabili della classe:
    Lista<nodo>:osizione pos;
    Mi appaiono errori strani...
    Mi autoquoto
    Per il secondo problema, devi specificare che nodo è un tipo annidato.
    Oltre ovviamente a mettere typename
    typename Lista< typename Grafo<T>::nodo >:osizione pos;

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.