Private Variable verändern



  • ich hab hier ein problem bei dem ich einfach nicht weiterkomme.

    class a {
    public:
     void change(std::string);
    private:
    static std::string a;
    };
    
    std::string a::a = "a.exe";
    
    void a::a(std::string path) {
    a = path + a;
    }
    

    Es kommt imer wieder die fehlermeldung a wäre private... error within this context

    Aber selbst wenn ich a public mache geht es nicht...

    Wo liegt hier der Fehler?



  • Klasse und Variable heissen a?


  • Mod

    Kannst du erst einmal alles so nennen, wie es wirklich heißt? Dein change heißt beispielsweise mal change, mal a. Sprich: Kopier(!) bitte 1:1 den Code mit Fehlermeldung, anstatt hier im Forum zu "programmieren". Da machst du nämlich bloß lauter Tippfehler, die nichts mit dem Problem zu tun haben.



  • #ifndef LAUNCHER_HPP
    #define LAUNCHER_HPP
    
    #include <map>
    #include <string>
    #include <windows.h>
    
    class launcher {
    public:
     int start(std::string);
     std::string swd(std::string);
     int vlc_fullscreen(std::string);
     int vlc_minimized(std::string);
    private:
     static std::string librePath;
     static std::string vlcPath;
    };launcher *l;
    
    int start(std::string path){
     std::map<std::string, short int>type;
      type["avi"] = 2;
      type["doc"] = 3;
      type["mkv"] = 2;
      type["mp3"] = 1;
      type["mp4"] = 2;
      type["wav"] = 1;
    
     if(type[path.substr(path.length()-3,3)] == 1) { l->vlc_fullscreen(path); }
     if(type[path.substr(path.length()-3,3)] == 2) { l->vlc_minimized(path); }
    }
    
    std::string swd(std::string mwd) {
     mwd = mwd.substr(0,mwd.rfind('\\')+1);
    // librePath = '\"' + mwd + librePath + '\"';
     l->vlcPath = '\"' + mwd + "Apps\\VideoLAN\\VLC\\vlc.exe" + '\"';
     std::cout << l->vlcPath;
     return mwd;
    }
    
    int vlc_fullscreen(std::string path) {
     path = " -f \"" + path + '\"';
      std::string a = l->vlcPath;
     ShellExecute(NULL,"open",a.c_str(),path.c_str(),NULL,NULL);
    }
    
    int vlc_minimized(std::string path) {
     path = " --qt-start-minimized \"" + path + '\"';
     std::string a = l->vlcPath;
     ShellExecute(NULL,"open",a.c_str(),path.c_str(),NULL,NULL);
    }
    
    #endif
    

    zur erklärung statts l-> sollte man this verwenden ich weis... funktioniert nur nicht...

    und header und methoden sollte man trennen aber finde es so besser...



  • code teilweise verändert in librepath und vlcPath sollte eigentlich noch der relative pfad stehen...



  • steht jetzt eben in der methode selber...
    und will die variable vlcPath z. B. dann verändern...
    krieg das nur nicht hin



  • So sollte es eigentlich aussehen...

    #ifndef LAUNCHER_HPP
    #define LAUNCHER_HPP
    
    #include <map>
    #include <string>
    #include <windows.h>
    
    class launcher {
    public:
     int start(std::string);
     std::string swd(std::string);
     int vlc_fullscreen(std::string);
     int vlc_minimized(std::string);
    private:
     static std::string librePath;
     static std::string vlcPath;
    };launcher *l;
    
    std::string vlcPath = "Apps\\VideoLAN\\VLC\\vlc.exe";
    
    int start(std::string path){
     std::map<std::string, short int>type;
      type["avi"] = 2;
      type["doc"] = 3;
      type["mkv"] = 2;
      type["mp3"] = 1;
      type["mp4"] = 2;
      type["wav"] = 1;
    
     if(type[path.substr(path.length()-3,3)] == 1) { l->vlc_fullscreen(path); }
     if(type[path.substr(path.length()-3,3)] == 2) { l->vlc_minimized(path); }
    }
    
    std::string swd(std::string mwd) {
     mwd = mwd.substr(0,mwd.rfind('\\')+1);
    // librePath = '\"' + mwd + librePath + '\"';
     vlcPath = '\"' + mwd + vlcPath + '\"';
     std::cout << l->vlcPath;
     return mwd;
    }
    
    int vlc_fullscreen(std::string path) {
     path = " -f \"" + path + '\"';
     ShellExecute(NULL,"open",librePath.c_str(),path.c_str(),NULL,NULL);
    }
    
    int vlc_minimized(std::string path) {
     path = " --qt-start-minimized \"" + path + '\"';
     ShellExecute(NULL,"open",vlcPath.c_str(),path.c_str(),NULL,NULL);
    }
    
    #endif
    


  • zur erklärung nochmal damit man den code versteht
    mwd ist hier gleich argv[0]...



  • I:\Neuer Ordner (2)\launcher.hpp||In function 'std::string swd(std::string)':|
    I:\Neuer Ordner (2)\launcher.hpp|16|error: 'std::string launcher::vlcPath' is private|
    I:\Neuer Ordner (2)\launcher.hpp|38|error: within this context|
    I:\Neuer Ordner (2)\launcher.hpp||In function 'int vlc_fullscreen(std::string)':|
    I:\Neuer Ordner (2)\launcher.hpp|44|error: 'librePath' was not declared in this scope|
    I:\Neuer Ordner (2)\launcher.hpp||In function 'int vlc_minimized(std::string)':|
    I:\Neuer Ordner (2)\launcher.hpp|49|warning: passing NULL to non-pointer argument 6 of 'HINSTANCE__* ShellExecuteA(HWND, LPCSTR, LPCSTR, LPCSTR, LPCSTR, INT)' [-Wconversion-null]|
    ||=== Build failed: 3 error(s), 1 warning(s) (0 minute(s), 0 second(s)) ===|



  • Zeile 44 sollte statts librePath vlcPath heißen



  • Woher soll der Compiler wissen, wozu die unten definierten funktionen gehören bzw ob sie überhaupt zu irgendeiner klasse gehören?



  • okai thx
    🙂 einfach vergessen


Anmelden zum Antworten