Template di vector

di il
9 risposte

Template di vector

Salve a tutti vi vorrei proporre un mio dubbio sull'implementazione di un template di funzione di vector.
L'estratto di codice è...
#include<iostream>
#include<vector>

using namespace std;
template <class T>
void printVector(const vector<T> &vec);

int main(){
vector<int> Vector;
Vector.push_back(2);
Vector.push_back(3);
Vector.push_back(4);
cout<<"\nLa misura è:"<<Vector.size();
cout<<"\nStampa del vettore";
vector<int>::reverse_iterator p2;
for(p2=Vector.rbegin();p2!=Vector.rend();++p2)
cout<<*p2<<' ';
cout<<"\nSeconda stampa:";
printVector(Vector);
return 0;
}

template<class T>
void printVector(const vector<T> &vec){
vector<T>::const_iterator p1;
for(p1=vec.begin();p1!=vec.end();++p1){
cout<<*p1<<' ';}
}


come ovviamente avete notato è presente l'implementazione della funzione di stampa di un vettore e poi il richiamo di una funzione in template quasi uguale di nuovo di stampa.
Tuttavia il compilatore mi da errore sulle righe
for(p1=vec.begin();p1!=vec.end();++p1){
cout<<*p1<<' ';}


risulta anche a voi questo errore?Se si, mi potreste indicare dove è che ho sbagliato?
Grazie

9 Risposte

  • Re: Template di vector

    Prova con:
    
    template<class T>
    void printVector(const vector<T> &vec) {
        vector<T>::const_iterator p1;
        for(p1=vec.cbegin();p1!=vec.cend();++p1){
            cout<<*p1<<' ';
        }
    }
    
  • Re: Template di vector

    ...i had found this code on a book so i thought it was correnct,
    have you any suggestions for me?what should i try to solve it?
  • Re: Template di vector

    @shodan
    Prova a cambiare la firma
    Qui di scambiano per straniero

    @mrsmith
    Che compilatore stai usando?
  • Re: Template di vector

    ....eclipse 4.2.0.
    Grazie
  • Re: Template di vector

    @skynet
    Già Però è simpatica come cosa.

    @mrsmith
    Il codice che hai scritto a me compila anche senza la modifica suggerita.
    Che errori ti da di preciso?
  • Re: Template di vector

    Ciao ragazzi, scusate il ritardo nel rispondere, ma ieri ho avuto un esame....
    gli errori che mi si presentano sono:
    \lab3.cpp:25: error: expected ';' before 'p1'
    ..\lab3.cpp:26: error: 'p1' was not declared in this scope
    ..\lab3.cpp: In function 'void printVector(const std::vector<T, std::allocator<_CharT> >&) [with T = int]':
    ..\lab3.cpp:19: instantiated from here
    ..\lab3.cpp:25: error: dependent-name 'std::vector::const_iterator' is parsed as a non-type, but instantiation yields a type
    ..\lab3.cpp:25: note: say 'typename std::vector::const_iterator' if a type is meant


    sono perplesso...
    Grazie
  • Re: Template di vector

    Spiegato l'arcano.
    Quando si intende utilizzare un tipo definito internamente a un template occorre precederlo col qualificatore typename. In caso contrario il compilatore non sa se ha a che fare con un tipo di variabile o una variabile.
    Nota che vale solo se il tipo del template è ignoto.
    Per capirsi: vector<int>::const_iterator p1; non avrebbe dato errori.
    
    template<class T>
    void printVector(const vector<T> &vec) {
        typename vector<T>::const_iterator p1;
        for(p1=vec.begin();p1!=vec.end();++p1){
            cout<<*p1<<' ';
        }
    }
    
  • Re: Template di vector

    La differenza era solo quel typename quindi?
    Grazie mille
  • Re: Template di vector

    Si, del resto i messaggi di errore confermano (metti sempre i messaggi di errore se no si perde solo tempo).
    Il fatto che a me compili anche senza lo metto tra i bug del mio compilatore (o che riesca a non rendere ambiguo il contesto).
Devi accedere o registrarti per scrivere nel forum
9 risposte