Mehrere Variablen zurückgeben



  • Hallo,

    ich versuche gerade mehrere Variablen zurück zugeben.

    Einmal ein struct sockaddr_in und die Socket ID vom Typ Inet:

    Funktion:

    std::pair<sockaddr_in, int> TelemetryReceiver::CreateUDPClient(int port, const char* ip){
    
    	// ServerAdress Struktor
    	sockaddr_in *serverAdress;
    
    	// Neuen Socket erstellen
    	int _socket = socket(AF_INET,SOCK_DGRAM,0);
    
    	// Informationen übergeben
    	serverAdress.sin_family = AF_INET;
    	serverAdress.sin_addr.s_addr = inet_addr(ip);
    	serverAdress.sin_port = htons(port);
    
    	// Alles ok?
    	if(_socket == -1)
    	{
    		// Nicht gut!
    		throw THOMASException("Beim erstellen des Sockets ist ein Fehler aufgetreten");
    	}
    
    	return std::make_pair(serverAdress, _socket);
    }
    

    Header:

    std::pair<sockaddr_in, int> CreateUDPClient(int port, const char* ip);
    

    Und als Fehlermeldung bekomme ich folgendes:

    TelemetryReceiver.cpp:22:29: error: prototype for ‘std::pair<sockaddr_in, int> THOMAS::TelemetryReceiver::CreateUDPClient(int, const char*)’ does not match any in class ‘THOMAS::TelemetryReceiver’
     std::pair<sockaddr_in, int> TelemetryReceiver::CreateUDPClient(int port, const char* ip){
                                 ^
    In file included from TelemetryReceiver.cpp:1:0:
    TelemetryReceiver.h:27:32: error: candidate is: std::pair<THOMAS::TelemetryReceiver::sockaddr_in, int> THOMAS::TelemetryReceiver::CreateUDPClient(int, const char*)
        std::pair<sockaddr_in, int> CreateUDPClient(int port, const char* ip);
                                    ^
    make: *** [TelemetryReceiver.o] Fehler 1
    

    Woran liegt der Fehler, ich habe keine Ahnung mehr 😢

    Ich hatte nämlich vor, diese createUDPClient Methode mehrmals aus verschiedenen Threads aufzurufen. Wenn ich die SocketID dann global speichern würde, dann würde diese doch immer wieder überschrieben werden, oder liege ich da falsch?

    Ich bin gerade am C++ lernen, und habe mit Templates noch nicht soviel Erfahung, also seid nicht zu hart zu mir 😃

    Danke



  • Wo kommt sockaddr_in im Header her? Der Compiler findet nur ein THOMAS::TelemetryReceiver::sockaddr_in. Hast du eine struct in der Klasse vorwärtsdeklariert?



  • Ich hab im Header geschrieben:
    struct sockaddr_in;

    Ist vermutlich falsch oder 😃



  • Du hast das wohl in die Klasse TelemtryReceiver geschrieben. Das bedeutet, dass das sich die struct allerdings auch darauf bezieht und nicht auf die im globalen Namespace.
    Ergo: Deklariere sie im globalen Namespace.



  • Waishon schrieb:

    // ServerAdress Struktor
    	sockaddr_in *serverAdress;
    
            ...
    
    	// Informationen übergeben
    	serverAdress.sin_family = AF_INET;
    	serverAdress.sin_addr.s_addr = inet_addr(ip);
    	serverAdress.sin_port = htons(port);
    

    Das kann nicht funktionieren ...


Anmelden zum Antworten