Funktion in Klasse ändern
-
Also, ich habe hier die WinApi-Funktion vom Upload auf FTP:
void upload(char *server, char *account, char *passwort); // Deklaration void upload(char *server, char *account, char *passwort) { HINTERNET hOpen, hConnection; hOpen = InternetOpen("FTP Upload", INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0); hConnection = InternetConnect(hOpen, server, INTERNET_DEFAULT_FTP_PORT, account, passwort, INTERNET_SERVICE_FTP, 0, 0); FtpPutFile(hConnection, "C:\\data.reg", "//data.reg", FTP_TRANSFER_TYPE_BINARY, 0); InternetCloseHandle(hConnection); InternetCloseHandle(hOpen); }Ich habe versucht, daraus eine Klasse zu machen, bin aber gescheitert.
#include <windows.h> #include <wininet.h> #include <process.h> #include <iostream> #include <fstream> #include <stdio.h> #include <conio.h> #include <time.h> #include <string> #include <sstream> using namespace std; class Upload { public: Upload(); HINTERNET hOpen = InternetOpen("FTP Upload", INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0); HINTERNET hConnection = InternetConnect(hOpen, server.c_str(), INTERNET_DEFAULT_FTP_PORT, account.c_str(), passwort.c_str(), INTERNET_SERVICE_FTP, 0, 0); BOOL FtpPutFile(hConnection, "C:\\data.reg", "//data.reg", FTP_TRANSFER_TYPE_BINARY, 0); BOOL InternetCloseHandle(hConnection); BOOL InternetCloseHandle(hOpen); }; Upload::Upload(): string account("account"), string server("www.server.net"), string passwort("passw.") { } int main() { Upload up; return 0; }FEHLER:
error C2864: "Upload::hOpen": Nur statische konstante integrale Datenmember können innerhalb einer Klasse initialisiert werden. error C2327: 'Upload::hOpen': Ist kein Typname, nicht statisch und kein Enumerator error C2065: 'hOpen': nichtdeklarierter Bezeichner error C2065: 'server': nichtdeklarierter Bezeichner error C2228: Links von ".c_str" muss sich eine Klasse/Struktur/Union befinden. 1> Typ ist ''unknown-type'' error C2065: 'account': nichtdeklarierter Bezeichner error C2228: Links von ".c_str" muss sich eine Klasse/Struktur/Union befinden. 1> Typ ist ''unknown-type'' error C2065: 'passwort': nichtdeklarierter Bezeichner error C2228: Links von ".c_str" muss sich eine Klasse/Struktur/Union befinden. 1> Typ ist ''unknown-type'' error C2864: "Upload::hConnection": Nur statische konstante integrale Datenmember können innerhalb einer Klasse initialisiert werden. error C2061: Syntaxfehler: Bezeichner 'hConnection' error C2061: Syntaxfehler: Bezeichner 'hConnection' error C2061: Syntaxfehler: Bezeichner 'hOpen' error C2535: 'BOOL Upload::InternetCloseHandle(void)': Memberfunktion bereits definiert oder deklariert Siehe Deklaration von 'Upload::InternetCloseHandle' error C2061: Syntaxfehler: Bezeichner 'account'
-
Wie wärs, wenn du erstmal lernst, was eine Klasse ist? So geht das jedenfalls nicht. Ein Anfang einer vernünftigen "Umwandlung":
class Uploader { public: Uploader(const char *server, const char *name, const char *pw) : Server(server) , Name(name) , Password(pw) { } ~Uploader() { close(); } bool connect(); void close(); bool upload(const char *fileName) { //... } private: string Server; string Name; string Password; HINTERNET SonstWas; };
-
Habe versucht, es so zu machen, wie Du beschrieben hast, hat aber nicht geklappt:
#include <windows.h> #include <wininet.h> #include <process.h> #include <iostream> #include <fstream> #include <stdio.h> #include <conio.h> #include <time.h> #include <string> #include <sstream> using namespace std; class Uploader { public: Uploader(const char *server, const char *name, const char *pw) : Server("www.server.net") , Name("acc") , Password("pw") { } ~Uploader() { close(); } bool connect(const char *server, const char *name, const char *pw) { hOpen = InternetOpen("FTP Upload", INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0); hConnection = InternetConnect(hOpen, server, INTERNET_DEFAULT_FTP_PORT, name, pw, INTERNET_SERVICE_FTP, 0, 0); return TRUE; } void close() { InternetCloseHandle(hConnection); InternetCloseHandle(hOpen); } bool upload(const char *fileName) { FtpPutFile(hConnection, "C:\\data.reg", "//data.reg", FTP_TRANSFER_TYPE_BINARY, 0); return TRUE; } private: const string Server; const string Name; const string Password; HINTERNET hOpen, hConnection; }; int main() { Uploader up; return 0; }Fehler:
(63) : error C2512: 'Uploader': Kein geeigneter Standardkonstruktor verfügbar
-
Ja! Steht da!
Dein Komstruktor nimmt drei Parameter und Du hast keinen angegeben.Wie wäre es mit enem Tutorial.
-
#include <windows.h> #include <wininet.h> #include <process.h> #include <iostream> #include <fstream> #include <stdio.h> #include <time.h> #include <string> #include <sstream> using namespace std; class Uploader { public: Uploader::Uploader() //Konstruktor?? : Server("www.server.net") , Name("acc") , Password("pw") { } ~Uploader() { close(); } bool connect(const string *server, const string *name, const string *pw) { hOpen = InternetOpen("FTP Upload", INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0); hConnection = InternetConnect(hOpen, server, INTERNET_DEFAULT_FTP_PORT, name, pw, INTERNET_SERVICE_FTP, 0, 0); return TRUE; } void close() { InternetCloseHandle(hConnection); InternetCloseHandle(hOpen); } bool upload(const char *fileName) { FtpPutFile(hConnection, "C:\\data.reg", "//data.reg", FTP_TRANSFER_TYPE_BINARY, 0); return TRUE; } private: string Server; string Name; string Password; HINTERNET hOpen, hConnection; }; int main() { Uploader up; up.connect(soll ohne übergebene argumente funktionieren); cin.get(); return 0; }Ich möchte die Methode "connect" so aufrufen, dass die String-Elemente automatisch an sie übergeben werden und die Verbidung dann auch sofort besteht. Konvertieren mit
c_str()wollte nicht funktionieren.Geht nicht:
hConnection = InternetConnect(hOpen, server.c_str(), INTERNET_DEFAULT_FTP_PORT, name.c_str(), pw.c_str(), INTERNET_SERVICE_FTP, 0, 0);
-
HAT SICH ERLEDIGT. TOPIC BEENDET.