Anfängerfrage: Auf fremde Klasse zugreifen



  • Hi ihr.
    Ich schätze mal das die Frage eher nen Witz ist, aber als Umsteiger von Dev-C++ nach Visual C++ 2005 krieg ich was ganz einfaches nicht hin...
    und zwar möchte ich aus Form1.h folgendes aufrufen:

    System::String^ demotext = filesystem::loadstring("name.ext", "key")

    ich habe jetzt 2 Dateien erstellt die folgendermaßen aussehen...

    filesystem.h

    #pragma once
    
    ref class filesystem
    {
    public:	filesystem(void);
    >>> public: System::String^ loadstring(System::String^ filename, System::String^ stringname);
    
    };
    

    filesystem.cpp

    #include "StdAfx.h"
    #include "filesystem.h"
    
    filesystem::filesystem(void)
    {
    }
    System::String^ filesystem::loadstring(System::String^ filename, System::String^ stringname)
    {
    return "AAA";
    }
    

    Allerdings bekomme ich darauf folgenden Fehler heraus...
    ... error C2352: 'filesystem::loadstring': Unzulässiger Aufruf einer nicht statischen Memberfunktion
    ...\filesystem.h(6): Siehe Deklaration von 'filesystem::loadstring'

    Zeile 6 ist die, wbei welcher ich >>> im Code gemacht habe. Hab ich da irgendwas übersehen, oder muß ich irgendein Typ (z.B. an public) ändern.
    Sorry für diese Frage, aber hab da wirklich keine Ahnung (Google streikt heut ^^)
    PS: Die Class ist in Form1.h includiert (#include "filesystem.h")



  • Hat keiner eine Antwort???
    ist dringend. PS: Oder nennt mir mal nen Google-Begriff, was mir weiterhelfen könnte.



  • 1. Das ist kein C++ sondern C++/CLI

    2. Wie auch im normalen C++ kannst Du Methoden nur von einer Instanz aufrufen. Es sei denn Du machst die Methode statisch, dann kannst Du sie auch direkt aufrufen...

    Also:

    ref class filesystem
    {
      public: filesystem(void);
      public: static String::String^ loadstring(System::String^ filename, System::String^ stringname);
    };
    

    Alternativ kannst Du natürlich eine Instanz anlegen, dann brauchst Du das mit dem "static" nicht zu machen:

    filesystem ^fs = gcnew filesystem();
    fs->loadstring("a", "b");
    


  • Ah, danke. Habs sofort geändert und hat funktioniert.
    Hab zuerstmal gehofft, das ich anstatt class mit namespace arbeiten könnte, aber das stellte mir das gleiche Problem dar. Dann hab ich public durch static überschrieben und es gab nur mehr Probleme.
    Zuletzt dann noch vor ref class ein public gehangen, aber nix tat sich.
    Jetzt hab ja ich endlich die Lösung. Dank dir vielmals 👍
    (PS: Hätte nur etwas an PHP denken müssen, da gibts ja auch $variable = new classname(); )


Anmelden zum Antworten