Abgeleitete Klasse übergeben ?



  • Hallo @ all,

    Eine frage: Warum kann ich abgeleitete Klasse: --> public ref class Form_1 : public System::Windows::Forms::Form nicht übergeben ?

    Diese befindet sich im namespace Spiel !

    Wenn ich also eine Funktion zBsp: Rechnen( Spiel::Form_1^ fenster ); erzeuge bekomme ich 2 Fehlermeldungen: 'Spiel': Keine Klasse oder Namespace und Syntaxfehler: Bezeichner 'Form_1'

    Dabei ist ja Spiel ein Namespace: wenn ich Spiel:: <-- schreibe, kommt sogar automatisch Vorschlag Klasse Form_1 auszuwählen!

    using namespace Spiel; geht dementsprechend auch nicht 😕

    Rechnen( System::Windows::Forms::Form^ fenster ); <-- Sowas klappt ja gut, leider sind die Funktionen die ich brauche dort nicht enthalten. 😞



  • Ist denn in der Unit der Header für die Form eingebunden ?
    (Nur weil intellisense das vorschlägt muss es nich sein).

    Wenn der Namespace nicht bekannt ist, fehlt er schlicht was darauf hindeuten könnte, das Du vergessen hast den passenden Header zu inkludieren.

    Wenns das nich war, mehr details bitte 🙂



  • Nur zum Verständnis: Was ist jetzt mit Unit gemeint ?



  • In dem Teil des Quellcodes in dem Du das ganze aufrufen willst.

    Aus Deinem Post wird man nicht wirklich schlau, ausser das der Namespace nicht bekannt ist.



  • OK, dachte ich schon dass du mit Unit die Datei meinst.

    OK, es bringt nichts, ich habe alles mögliche includiert, trotzdem der Fehler.
    Das dumme ist, dass in der cpp-Datei er sowas wie void <Klasse>::Rechnen( Spiel::Form_1 fenster ){...} versteht, aber nicht mehr in der HeaderDatei, die zu dieser Klasse gehört.



  • Mach doch mal ein minimalbeispiel oder Poste mal den Code.

    Ist denn im Header der Namespace definiert ?



  • Hier nochmal die Situation:
    Ich habe eine WinForm Klasse "Fenster" und eine Klasse "Spiel".
    Es ist kein Problem, ein Spiel-Objekt zu erzeugen und aus dem Fenster-Objekt anzusprechen. Nun möchte ich aber auch das Fenster-Objekt an das Spiel-Objekt übergeben, um von dort darauf zugreifen zu können.
    In der Datei Spiel.h habe ich die entsprechenden Header inkludiert, trotzdem ist es mir nicht möglich, ein Obkjekt vom Typ Fenster an Spiel zu übergeben.

    Die Fehlermeldung wegen des Namespace erscheint nun nicht mehr, dafür aber: error C2039: 'Fenster' : is not a member of 'Projekt'
    Die Fensterklasse wurde vom WinForm Designer komplett in einer Header-Datei erzeugt.

    Den code-Beispiel überlege ich mir sofort, will nicht alles hier Posten, um den Ramen nicht zu sprengen



  • hm, bereinige das Projekt und schicks mal zu



  • Vielen Dank an der Stelle !!! Danke für die Forward Deklaration !!!



  • Hallo,

    es gab ein wenig Chaos beim Includieren der Header.
    Eines der Probleme lies sich per forward deklaration lösen. (Sorry, meinen Beitrag finde ich nicht mehr und in einer FAQ wurde er leider nicht aufgenommen :o( )

    Die restlichen Fehler liesen sich durch einfaches weglassen der includes verwenden.

    Generell sollte man nur dann einen Include setzen, wenn dieser unbedingt benötigt wird. Alleine durch die Tatsache, das der Compiler jede Unit neu Übersetzen muss wenn ich ein Header, der includiert wird, geändert wurde, sollte der anreiz sein an der ein oder anderen Stelle mit Forwarddeklarationen zu arbeiten.

    Als Tip zur Fehlersuche:

    Die Units einzeln Compilieren. Je nachdem in welcher Reihenfolge der VC auf die Idee kommt die Units zu kompilieren, kann der Effekt auftreten oder verborgen bleiben. Kann jedoch jede Unit für sich alleine Übersetzt werden, kann man sich sicher sein, das der Quellcode sich immer übersetzen lässt.

    Ihr kennt doch Murphy, der Kunde hats eilig und plötzlich gibts Fehler im Quellcode die es noch nie gab - und das nur weil der Compiler anderst gelaunt ist und eine andere Reihenfolge nimmt 🤡


Anmelden zum Antworten