boost asio: Problem mit Servererstellung in einer Klasse



  • Ja, ich denke das habe ich jetzt verstanden. Aber das Konzept kann ich nicht auf mein Problem anwenden 😞 hab bis jetzt auch keine Lösung gefunden.

    Ich habe ja keinen Übergabewert, bzw. doch aber dieser wert ist in der Klasse ja deklariert 😞



  • Wenn du keinen Übergabwert hast, schreibste den halt selber hin!

    //main.cpp 
    #include <iostream> 
    
    class A { 
    public: 
        A(): variable(5) { } // <--- Konstruktor mit Initialisierungsliste 
        int getVariable() const { return variable; } 
    private: 
        int variable; 
    }; 
    
    int main() 
    { 
        A instanz; // keine Übergabewert
    
        std::cout << "Wert: " << instanz.getVariable() << std::endl; 
    
    }
    

    Die Frage ist, ob du jetzt weißt, warum man das überhaupt braucht? Wahrscheinlich nicht...



  • //main.cpp
    #include <iostream>
    
    class A {
    public:
        A(): variable(5) { } // <--- Konstruktor mit Initialisierungsliste (Ok) 
    
        klasse1 obj1;         <--- Das ist ja mein Problem!
        klasse2 obj2(obj1);
    
    };
    
    int main()
    {
        A instanz; // keine Übergabewert
    }
    

    So nun nochmal mein Problem vereinfacht dargestellt. Ich möchte keiner Variable einen Wert zuweisen. Ich möchte ein Objet, dass ich in der Klasse A erstelle (obj1) direkt weiter geben an das Objekt von Klasse2.

    PS: Ich fang langsam an zu glauben das ich irgendwie zu blöd bin heute :p

    Trotzdem danke für eure Bemühungen mir das einzutrichtern 🙂



  • So vielleicht 😃

    //main.cpp
    class klasse1 {
    public:
    	klasse1(int wert = 0): variable(wert) { } // <--- Konstruktor mit Initialisierungsliste und Standardargument
    private:
    	int variable;
    };
    
    class klasse2 {
    public:
    	klasse2(klasse1 obj): objekt(obj) { } // <--- Konstruktor mit Initialisierungsliste und "Übergabewert"
    private:
    	klasse1 objekt;
    };
    
    class A { 
    public: 
        A(): obj1(5), obj2(obj1) { } // <--- Konstruktor mit Initialisierungsliste
    private:
        klasse1 obj1;
        klasse2 obj2; 
    }; 
    
    int main() 
    { 
        A instanz; // kein Übergabewert 
    }
    


  • WAR][FIRE! Dir ist schon bewusst, dass das hier ganz normal ist:

    void foo()
    {
        int a(5);
        int b = 5; // das gleiche wie eine zeile drüber
    }
    


  • ich denke ich werde mich morgen ähhh heute nochmal damit beschäftigen -.-

    Gruß
    WAR][FIRE



  • So vielleicht bin ich des Rätsels Lösung schon etwas näher gekommen:

    boost::asio::io_service io_service;
    
    	tcp::acceptor acceptor2;
            tcp::socket socket2;
    
    	create_serv_com( ) :
              acceptor2( io_service, tcp::endpoint(tcp::v4() , 13 )),
    	  socket2(io_service){}
    

    Fehler:
    Error 1 error C2512: 'boost::asio::basic_socket_acceptor<Protocol>' : no appropriate default constructor available 47 TCP Server

    Ich denke soetwas in der Richtung probiert Ihr mir zu erzählen aber es geht immernoch nicht -.-

    Gruß
    WAR][FIRE



  • Ein Tip: wenn dir die Fehlermeldung nicht auf Anhieb klar ist, solltest du die MSDN zu Rate ziehen. Das Geniale am MSVC ist, das er Errorcodes mit gibt. In deinem Fall den C2512. Schau mal hier:

    http://msdn.microsoft.com/de-de/library/9zkz8dx6(VS.80).aspx

    Du initialisierst sowohl acceptor2 und socket2 mit einem parametrisierten Ctor-Aufruf. Was erstmal richtig ist und den Fehler nicht mehr bringen sollte. Ich denke mal du hast irgendwo einen Syntaxfehler. Kannst du etwas mehr code posten und sagen welche Zeile er ankreidet?

    EDIT: kann es sein, das du vielleicht mal die io_service-Variable anders benennen solltest? Der kommt da mit dem gleichnamigen Typnamen io_service durcheinander!!! Die Variable vielleicht io_service2 o.ä. benennen.



  • ich hatte noch aus versehen eine Klasse drin die vererbt wurde! 😃

    Jetzt funktionierts endlich 😃

    Danke für die Hilfe! 🙂

    Gruß
    WAR][FIRE



  • Hallo!

    Weiß jemand wie via. boost::asio die Verbindungsinformationen abfragen kann?

    Finde in den asio references irgendwie nichts dazu.

    nach

    acceptor.accept(socket);
    

    Müssen ja Verbindungsinformationen zu Verfügung stehen. z.B. die IP des Verbundenen...

    Gruß
    WAR][FIRE


Anmelden zum Antworten