000
25.08.2006, 20:06 Uhr
Yadgar
|
High!
Folgender Code:
C++: |
struct A { int i; double d; };
struct B { string s; };
B fromAToB (const A&);
B fromAToB (const A& a_in) { cout << "Typwandlung per Funktion!" << endl; B result; char buf[32]; sprintf(buf, "i: %i, d: %f", a_in.i, a_in.d); result.s = buf; }
int main() { A a; a.i=34; a.d=0.00214; B b;
b = fromAToB(a); cout << b.s << endl; getchar(); }
|
...mit meinem Immer-noch-Anfänger-Verstand (ab wann ist man eigentlich kein Anfänger mehr? Vorgestern Nacht habe ich zum ersten Mal in C++ geträumt...) vermute ich mal, dass der Inhalt der beiden Mitgliedsvariablen von a in der Funktion fromAToB in einen String geschrieben wird, der auf dem Bildschirm angezeigt etwa so aussehen müsste:
i: 34, d: 0.00214
- stattdessen bekomme ich zwei DOS-Fensterseiten lang kryptischen Zeichensalat, \b-Piepton inbegriffen... wie kann das sein? Liegt es daran, dass für beide "Klassen" weder Konstruktoren noch Zuweisungsoperatoren programmiert sind? Wenn ich b gleich mit fromAToB(a) initialisiere, wird gar nichts angezeigt (außer der Testausgabe am Beginn der Funktion), stattdessen scheint das Programm in eine Endlosschleife hineinzulaufen, die nach etwa 5 Sekunden abgebrochen wird.
Am nicht vorhanden "const" in der Deklaration von a kann es nicht liegen, das Verhalten ist ohne const in der Parameterliste von fromAToB genau gleich!
Irgendeine Idee?
Bis bald im Khyberspace!
Yadgar -- Flagmaker - ein Programmier-Blog |