/ Forside / Teknologi / Udvikling / C/C++ / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
jdjespers.. 500
kyllekylle 500
Bech_bb 500
scootergr.. 300
gibson 300
molokyle 287
10  strarup 270
Brugerdefination af operator<< til std::ve~
Fra : Thomas Krog


Dato : 31-05-02 13:24

Jeg vil gerne levere en brugerdefineret operator<< til en klasse (fx:
std::vector<A>::iterator) der befinder sig inde i en template klasse. Jeg
håbede det kunne løses således:
#include <iostream>
using namespace std;

template<class A>
struct Bvector{
class iterator{
friend ostream& operator<<(ostream& os,const Bvector<A>::iterator& i);
A* x;
};
};
template<typename A>
ostream& operator<<(ostream& os,const Bvector<A>::iterator& i){
os << "iterator = " << i.x;
return os;
}
int main(){
Bvector<int>::iterator i;
cout << i << endl;
}
Ovenstående kode give følgende fejl ved oversættelse:
undefined first referenced
symbol in file
operator<<(ostream &, Bvector<int>::iterator const &)/tmp/cclsSNeRH.old:
fatal: Symbol referencing errors.

Hvis jeg derpå tilføjer en implementering af operator<< specialliseret til
Bvector<int> oversætter det fint:
ostream& operator<<(ostream& os,const Bvector<int>::iterator& i){
os << "iterator = " << i.x;
return os;
}
Nogen der har et bud på hvad jeg kan gøre for at få operator<< til at virke
i det generelle tilfælde?



 
 
Thomas Krog (02-06-2002)
Kommentar
Fra : Thomas Krog


Dato : 02-06-02 21:40

Jeg spurgte lige over på comp.lang.c++.moderated da der ikke umiddelbart kom
svar her. De havde to løsninger:

----løsning 1-------
template<class A>
class Bvector_iterator{
friend ostream& operator<<(ostream& os,const Bvector_iterator<A>& i);
A* x;
};

template<class A>
struct Bvector{
typedef Bvector_iterator<A> iterator;
};

-----løsning 2-------

template<class A>
struct Bvector{
class iterator{
friend ostream& operator<<(ostream& os,const Bvector<A>::iterator& i)
{
return os << "iterator = " << i.x;
}

A* x;
};
};




Thomas Krog (02-06-2002)
Kommentar
Fra : Thomas Krog


Dato : 02-06-02 23:55

Fejl i løsning 1. Der mangler et <> ved friend linjen. Den fuldstændige
løsning 1 ser således ud:

#include <iostream>
using namespace std;

template<class A>
class Bvector_iterator;

template<class A>
ostream& operator<<(ostream& os, const Bvector_iterator<A>& i);

template<class A>
class Bvector_iterator{
friend ostream& operator<< <>(ostream& os, const Bvector_iterator<A>& i);
A* x;
};
template<class A>
class Bvector{
typedef Bvector_iterator<A> iterator;
};
template<class A>
ostream& operator<< (ostream& os, const Bvector_iterator<A>& i){
os << "iterator = " << i.x;
return os;
}

int main(){
Bvector<int>::iterator i;
cout << i << endl;
}



Søg
Reklame
Statistik
Spørgsmål : 177496
Tips : 31968
Nyheder : 719565
Indlæg : 6408491
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste