/
Forside
/
Teknologi
/
Udvikling
/
C/C++
/
Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn
*
Kodeord
*
Husk mig
Brugerservice
Kom godt i gang
Bliv medlem
Seneste indlæg
Find en bruger
Stil et spørgsmål
Skriv et tip
Fortæl en ven
Pointsystemet
Kontakt Kandu.dk
Emnevisning
Kategorier
Alfabetisk
Karriere
Interesser
Teknologi
Reklame
Top 10 brugere
C/C++
#
Navn
Point
1
BertelBra..
2425
2
pmbruun
695
3
Master_of..
501
4
jdjespers..
500
5
kyllekylle
500
6
Bech_bb
500
7
scootergr..
300
8
gibson
300
9
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
Alle emner
Teknologi
Udvikling
C/C++
Indstillinger
Spørgsmål
Tips
Usenet
Reklame
Statistik
Spørgsmål :
177558
Tips :
31968
Nyheder :
719565
Indlæg :
6408925
Brugere :
218888
Månedens bedste
Årets bedste
Sidste års bedste
Copyright © 2000-2024 kandu.dk. Alle rettigheder forbeholdes.