FormSize via Konstruktor an Klasse übergeben



  • Hallo liebes C++ Forum :).
    Ich bin noch "recht neu" auf dem Gebiet C++ bzw. programmieren.
    Zur Zeit rätsele ich an einer Möglichkeit die Größe der Form (zum Zeitpunkt der Erstellung) via Konstruktor einem Objekt übergeben kann:

    Mein Konstruktoren aus der Klasse Chess:

    Chess::Chess(void)
    {
    	Pawns = gcnew array<FPawn^>(16);
    }
    
    Chess::Chess(int Width, int Height)
    {
    	mWidth = Width;
    	mHeight = Height;
    	Pawns = gcnew array<FPawn^>(16);
    }
    

    Und hier habe ich das Objekt mChess erzeugt in der Form1:

    private:
    		/// <summary>
    		/// Erforderliche Designervariable.
    		/// </summary>
    		Chess mChess(h,h);
    		System::ComponentModel::Container ^components;
    

    Ganz am Anfang der Form1 habe ich int h = 380 deklariert, da er in der private auch garnicht auf die ClientSize.Width bzw. ClientSize.Height zugreifen kann (wahrscheinlich, weil zu dem Zeitpunkt die Form ja noch nicht erstellt ist, oder?!

    Trotzdem bekomme ich folgende Fehlermeldungen:
    Error 1 error C2061: syntax error : identifier 'h' c:\schach 0.5b\schach1\schach1\Form1.h 59

    und außerdem scheint das Objekt mChess unbekannt zu sein:
    Error 2 error C2228: left of '.draw' must have class/struct/union c:\schach 0.5b\schach1\schach1\Form1.h 92
    Error 3 error C2228: left of '.setSize' must have class/struct/union c:\schach 0.5b\schach1\schach1\Form1.h 105

    Wenn ich das Objekt ohne den Konstruktor erzeuge, funktioniert alles super.
    Hat jemand eine Idee oder einen Vorschlag wie ich das am besten löse? Das wäre schon ziemlich wichtig, dass die Größe über den Konstruktor direkt mitgeschickt wird.

    Danke im vorraus,
    crephix



  • Ich bin noch "recht neu" auf dem Gebiet C++ bzw. programmieren.

    Du programmierst gar kein C++, sondern C++/CLI. 🕶

    Zu deinem Problem:

    ref class Form1 : public Form
    {
    public:
         Form1()
         {
             mChess = gcnew Chess(400, 500);
         }
    private:
         Chess^ mChess;
         System::ComponentModel::Container ^components;
    


  • Wow hier kommen ja verdammt schnell Antworten. Ich bin begeistert :).

    Leider habe ich immernoch 2 Fehler nach der Änderung. Scheinbar wird das Objekt mChess noch nicht richtig erzeugt:

    Error 1 error C2228: left of '.draw' must have class/struct/union c:\schach 0.5b\schach1\schach1\Form1.h 91
    Error 2 error C2228: left of '.setSize' must have class/struct/union c:\schach 0.5b\schach1\schach1\Form1.h 104



  • crephix schrieb:

    Error 1 error C2228: left of '.draw' must have class/struct/union c:\schach 0.5b\schach1\schach1\Form1.h 91
    Error 2 error C2228: left of '.setSize' must have class/struct/union c:\schach 0.5b\schach1\schach1\Form1.h 104

    Du solltest auch die entsprechenden Code-Zeilen posten, sonst kann man Dir nicht helfen... außer vielleicht durch:
    http://blog.kalmbach-software.de/de/2010/03/05/ccli-und-winforms-macht-keinen-sinn/



  • Jochen Kalmbach schrieb:

    crephix schrieb:

    Error 1 error C2228: left of '.draw' must have class/struct/union c:\schach 0.5b\schach1\schach1\Form1.h 91
    Error 2 error C2228: left of '.setSize' must have class/struct/union c:\schach 0.5b\schach1\schach1\Form1.h 104

    Du solltest auch die entsprechenden Code-Zeilen posten, sonst kann man Dir nicht helfen... außer vielleicht durch:
    http://blog.kalmbach-software.de/de/2010/03/05/ccli-und-winforms-macht-keinen-sinn/

    Ja den Beitrag zu sinnlos kenne ich. War etwas schockiert nachdem ich das gelesen habe, denn wir bekommen es in der Schule beigebracht und müssen demnach auch dran festhalten :(. Würde lieber was sinnvolles lernen.

    Naja back 2 the topic:

    in den Zeilen steht folgendes:

    mChess.draw(e->Graphics);
    mChess.setSize(this->ClientSize.Width, this->ClientSize.Height);
    

    Das sind einfach die einzigen Methodenaufrufe für dieses Objekt. Meine Schlussfolgerung => Das Objekt mChess ist nicht bekannt, warum auch immer :/.

    Gruß



  • Ne, das ist ein "ref" Objekt und somit musst Du es via "->" ansprechen:

    mChess->draw(e->Graphics); 
    mChess->setSize(this->ClientSize.Width, this->ClientSize.Height);
    

Log in to reply