Ik zit met een hele rare (denk ik) bug in mijn programma. Ik heb een aantal classes met een overloaded << operator alsvolgt:
Dus ik heb een class A met een array met members van type B en beide hebben diezelfde overloaded operator (maar dan met B &r). Je zou dus zeggen dat als ik nu doe:
dat dan alle B's netjes onder elkaar op het scherm komen. Het probleem is nu dat dit crashed als ik het run. En als ik het dan debug kom ik op de volgende plek terecht:
in _ostream.h op regel 4
Het rare is dat als ik een extra std::cout (dus niet de ostream output_stream) in de operator<< van Class B zet (na de for lus) dan crashed het niet.
Mijn vraag is nu. Doe ik iets fout (is het bv onhandig om dit soort genestte operator<< 's te hebben, in mijn echte code gaat dit namelijk 4 niveau's diep ipv 2 in het voorbeeld hier) Of klopt er ergens anders iets niet.
Edit: code trouwens gecompiled en getest met dev-cpp 4.9.9.1 en borland builder 6
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
| //in de class: class A { public: friend ostream& operator<<(ostream& output_stream, A &r); }; //functie: ostream& operator<<(ostream& output_stream, A &r) { for(int i = 0; i < r.size; i++) output_stream << r.member[i] << endl; } |
Dus ik heb een class A met een array met members van type B en beide hebben diezelfde overloaded operator (maar dan met B &r). Je zou dus zeggen dat als ik nu doe:
C++:
1
2
3
4
5
6
| int main(int argc, char *argv[]) { int size = 10; A Ding(size); cout << Ding << endl; } |
dat dan alle B's netjes onder elkaar op het scherm komen. Het probleem is nu dat dit crashed als ik het run. En als ik het dan debug kom ik op de volgende plek terecht:
in _ostream.h op regel 4
C++:
1
2
3
4
5
6
7
| template <class _CharT, class _Traits> inline basic_ostream<_CharT, _Traits>& _STLP_CALL endl(basic_ostream<_CharT, _Traits>& __os) { __os.put(__os.widen('\n')); __os.flush(); return __os; } |
Het rare is dat als ik een extra std::cout (dus niet de ostream output_stream) in de operator<< van Class B zet (na de for lus) dan crashed het niet.
Mijn vraag is nu. Doe ik iets fout (is het bv onhandig om dit soort genestte operator<< 's te hebben, in mijn echte code gaat dit namelijk 4 niveau's diep ipv 2 in het voorbeeld hier) Of klopt er ergens anders iets niet.
Edit: code trouwens gecompiled en getest met dev-cpp 4.9.9.1 en borland builder 6
[ Voor 17% gewijzigd door Coca-Cola op 10-03-2005 15:03 ]