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?
-
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