Nicht statischen Memberfunktion



  • Hallo,

    ich habe gesehen das diese Thema schon mehrmals behandelt wurde, hat mir aber leider nicht weitergeholfen. Benutze VS2005 C++, und bekomme "Unzulässiger Aufruf nicht statischen Memberfunktion" bei:

    void ecc::Form1::DisplayLabel1(void)
    {
      this->StatusLineLabel1->Text = "Text !";
    }
    
    void ecc::Form1::DisplayStatusLineLabel1(char *data)
    {
      ecc::Form1::DisplayLabel1();
    }
    

    die .h sieht wie folgt aus:

    namespace ecc {
    
    	using namespace System;
    	using namespace System::Windows::Forms;
    
    	public ref class Form1 : public System::Windows::Forms::Form
    	{
    	public:
    		Form1(void)
    		{
    			InitializeComponent();
    		}
    		static void DisplayStatusLineLabel1(char *);
    
    	protected:
    		~Form1()
    		{
    			if (components)
    			{
    				delete components;
    			}
    		}
    	private: System::Windows::Forms::StatusStrip^  StatusLine;
    	private: System::Windows::Forms::ToolStripStatusLabel^  StatusLineLabel1;
    
    	protected: 
    
    	private:
    	void DisplayLabel1(void);
    
    #pragma region Windows Form Designer generated code
    .....
    .....
    

    Bitte bei den freaks um Nachsicht wegen meiner Frage, aber kann mir bitte jemand sagen wie die Lösung aus sieht ?



  • ctk2 schrieb:

    Hallo,

    ich habe gesehen das diese Thema schon mehrmals behandelt wurde, hat mir aber leider nicht weitergeholfen. Benutze VS2005 C++, und bekomme "Unzulässiger Aufruf nicht statischen Memberfunktion" bei:

    void ecc::Form1::DisplayLabel1(void)
    {
      this->StatusLineLabel1->Text = "Text !";
    }
    
    void ecc::Form1::DisplayStatusLineLabel1(char *data)
    {
      ecc::Form1::DisplayLabel1();
    }
    

    1. falsches Forum
    2. du rufsteine nicht statische Funktion auf, du musst die Funktion über eine Referenz auf ein Objekt vom Typ Form1 aufrufen ...
    wenn die Referenz MyForm heißt also:

    MyForm->DisplayLabel1();

    Wieso machst du diese Methode eigentlich statisch?



  • Danke für die Antwort !

    zu 1; war mir unsicher ob diese Forum oder CLI.
    zu 2; Die Texte der Statusline sollen auch von anderen Klassen geändert werden.

    Also wenn ich es richtig verstehe lege ich eine Reference mit
    Form1^ MyForm; an.
    Das führt aber beim Aufruf zu einer Exception da this-> in DisplayLabel1() NULL ist.



  • ctk2 schrieb:

    Danke für die Antwort !

    zu 1; war mir unsicher ob diese Forum oder CLI.
    zu 2; Die Texte der Statusline sollen auch von anderen Klassen geändert werden.

    Also wenn ich es richtig verstehe lege ich eine Reference mit
    Form1^ MyForm; an.
    Das führt aber beim Aufruf zu einer Exception da this-> in DisplayLabel1() NULL ist.

    mit
    Form1^ MyForm legst eine Referenz an, allerdings verweist diese noch nicht auf ein Objekt, sondern eben auf NULL, damit du gleichzeitig ein neues Objekt erzeugst, auf das deine Referenz zeigt, musst du stattdessen einfach folgendes machen:
    Form1^ MyForm = gcnew Form1(/*Parameter*/);

    Ich weiß aber nicht, ob es als Einsteiger sinnvoll ist mit C++/CLI einzusteigen :xmas1:



  • Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum C++/CLI mit .NET verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.


Anmelden zum Antworten