Ik zit al een tijdje met het volgende probleem, dat de volgende code wel onder VC++ 6 compileert maar niet onder GCC 2.96:
Ik moet het dan altijd veranderen in het onderstaande om te laten compileren en dat is een beetje irritant:
Dit allemaal gegeven de volgende geschoonde class definitions:
Hoe krijg ik deze code met zo min mogelijk wijzigingen werkend op een regel? Is er een C++ cast oid? Of moet ik gewoon niet by-reference gebruiken? A geef ik liever niet by value door, want dan vind er een memcpy van wat data plaats.
Eigenlijk zie ik het probleem niet zo waarom de eerste optie niet zou werken want hij kan het object gewoon op de lokale stack aanmaken, by-reference doorgeven en daarna opruimen...
C++:
1
2
3
4
| B b = B(A("blaat")); test.cpp:181: could not convert `A("blaat")' to `A &' b.h:44: in passing argument 1 of `B::B (A &)' |
Ik moet het dan altijd veranderen in het onderstaande om te laten compileren en dat is een beetje irritant:
C++:
1
2
| A a = A("blaat"); B b = B(a); |
Dit allemaal gegeven de volgende geschoonde class definitions:
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| class A { public: A(const char *filename); A(const A& rhs); // copy constructor A& operator=(const A& rhs);// assignment operator }; class B { public: B(const B& rhs); // copy constructor B(A& a); ~B(); const B& operator=(const B& rhs); // assignment operator }; |
Hoe krijg ik deze code met zo min mogelijk wijzigingen werkend op een regel? Is er een C++ cast oid? Of moet ik gewoon niet by-reference gebruiken? A geef ik liever niet by value door, want dan vind er een memcpy van wat data plaats.
Eigenlijk zie ik het probleem niet zo waarom de eerste optie niet zou werken want hij kan het object gewoon op de lokale stack aanmaken, by-reference doorgeven en daarna opruimen...
[ Voor 34% gewijzigd door Rukapul op 24-03-2003 09:12 ]