Object call by reference



  • Hmmm...so ganz kapiere ich nicht. Ich wollte das Ganze in meinen Code einbauen. Die struct habe ich in ein extra File übernommen. Da es keine Headerdatei gibt, weiss ich a) nicht, wie mein Makefile an der Stelle aussehen muss, und b) wie ich die struct im aufrufenden File bekannt mache:

    Vergiss es, nun funktioniert es. FieldIndex ist ja eine Headerdatei. Da stand ich ganz schön auf dem Schlauch. 😡



  • wollewausfander schrieb:

    Eine Fehlermeldung, dass man einer int variablen keinen string zuweisen kann?!

    Der Stream-Operator >> ist für einen zweiten Operanden vom Typ std::size_t& überladen. Durch die Referenz bei std::size_t kann der Operator das Argument newY verändern.

    Überladene Operatoren sind ganz normale Funktionen mit spezieller Syntax und ein paar Sonderregeln.



  • l'abra d'or schrieb:

    Dann pack die Klassendefinition (nicht die Definition der Member-Funktionen!) in eine Header-Datei. Diese includieren wo sie benötigt wird.

    Ja, ich kam schon drauf, Postings haben sich überschnitten, s.U. 🙂

    l'abra d'or schrieb:

    BTW. könntest du dir mal nen Makefile-Generator anschauen. CMake find ich ganz praktisch, gibt aber noch viele andere wie boost.build, scons, usw. Da schreibst du eine kurze Datei in nem bestimmten Format, und der Generator erstellt Makefiles für verschiedenste Plattformen, Compiler, usw. automatisch. Hinzu kommen bei einigen Mechanismen um Abhängigkeiten zu finden. Dann ist es richtig einfach, Include-Verzeichnisse zu richtig einzubinden oder gegen die korrekte lib zu linken.

    Momentan ist das wohl kaum nötig bei den ersten Gehversuchen mit ein paar Dateien. Aber ich werde mir das auf jeden Fall für zukünftige Aktionen schonmal ansehen. Danke.

    Trotzdem; hätte es eine Möglichkeit gegeben, wenn keine Headerdatei vorhanden gewesen wäre? Ich hatte

    myField.setStone(firstPlayer, FieldIndex::FieldIndex(choice));
    

    versucht, was aber nicht funktioniert hat.



  • Nexus schrieb:

    wollewausfander schrieb:

    Eine Fehlermeldung, dass man einer int variablen keinen string zuweisen kann?!

    Der Stream-Operator >> ist für einen zweiten Operanden vom Typ std::size_t& überladen. Durch die Referenz bei std::size_t kann der Operator das Argument newY verändern.

    Überladene Operatoren sind ganz normale Funktionen mit spezieller Syntax und ein paar Sonderregeln.

    Achso, das leuchtet ein, << ist dann bei

    cout << intvariable
    

    vermutlich auch überladen?!



  • Exakt. Du kannst dir die Überladungen sogar anschauen. (am einfachsten mit einem "gehe zu Deklaration" Knopf deiner IDE).



  • drakon schrieb:

    Exakt. Du kannst dir die Überladungen sogar anschauen. (am einfachsten mit einem "gehe zu Deklaration" Knopf deiner IDE).

    Hmmm... weder gedit, noch kate, noch vim haben diesen Knopf. 😃

    Aber in den sourcen sollte es ja ersichtlich sein. Andererseits geht es aber doch auch aus den Erklärungen in der C++-Referenz hervor, oder?



  • drakon schrieb:

    Exakt. Du kannst dir die Überladungen sogar anschauen. (am einfachsten mit einem "gehe zu Deklaration" Knopf deiner IDE).

    Bei MSVC++ funktioniert dieses Feature nur für benannte Funktionen.

    Aber zum Beispiel hier kann man die Operatoren schön anschauen und muss sich nicht durch Implementierungskram wälzen. 😉
    Diese Online-Referenz (oder eine vergleichbare) sollte bei jedem C++-Programmierer in den Favoriten stehen, wenn er sie nicht sogar auswendig weiss.



  • Nexus schrieb:

    drakon schrieb:

    Exakt. Du kannst dir die Überladungen sogar anschauen. (am einfachsten mit einem "gehe zu Deklaration" Knopf deiner IDE).

    Bei MSVC++ funktioniert dieses Feature nur für benannte Funktionen.

    Es gibt ja die Möglichkeit den Operator als normale Funktion aufzurufen, aber selbst das geht nicht. Dachte, dass es geht..

    Und ich mag manchmal noch direkt den Implementierungscode sehen, weil ich dann sicher sein kann, dass es nicht nur ein "as-if" ist.



  • drakon schrieb:

    Und ich mag manchmal noch direkt den Implementierungscode sehen, weil ich dann sicher sein kann, dass es nicht nur ein "as-if" ist.

    Was ist ein "as-if"?

    Vielen Dank an Alle, die mich in diesem thread so tatkräftig unterstützt haben!



  • wollewausfander schrieb:

    Was ist ein "as-if"?

    Ein "als ob".

    drakon meint damit, er wolle sich vergegenwärtigen, wie die Implementierung tatsächlich aussehe. Denn auf www.cplusplus.com sind oft nur semantisch äquivalente Codes zu sehen (vor allem, was Implementierungen von STL-Algorithmen anbelangt).


Anmelden zum Antworten