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
    

  • Mod

    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.


Anmelden zum Antworten