Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C++, SFML] Zwracanie sf::Packet w metodzie 'get' klasy

Ostatnio zmodyfikowano 2014-06-07 23:10
Autor Wiadomość
DejaVu
» 2014-06-06 10:40:06
Można też zwrócić kopię obiektu, która w sumie będzie nieco lepsza, ponieważ z mojego doświadczenia klasa ta ma nieco wybrakowany interfejs, więc kopia jest nieco bardziej praktyczna.
P-111550
pekfos
» 2014-06-06 12:51:08
C/C++
//a tutaj chcę zwrócić ten pakiet. Niestety jego zawartość już jest pusta, bo znika przy wyjściu z funkcji receive_packet().
I dalej nie podałeś żadnego kodu, do zdiagnozowania faktycznego problemu. W praktyce klepiemy już drugą stronę tematu o niczym.
P-111553
Rughailon
Temat założony przez niniejszego użytkownika
» 2014-06-07 13:45:13
Wybaczcie za brak odpowiedzi, gdyż nie miałem dostępu przez ten czasu do projektu.

Kod:
C/C++
class c_manager {
private:
    sf::Packet packet_receive; //to jest ten pakiet
    std::string last_package;
public:
    bool send_package( sf::UdpSocket *, sf::IpAddress, unsigned short, std::string );
    bool send_package( sf::UdpSocket *, sf::IpAddress, unsigned short, sf::Packet );
    void receive_package( sf::UdpSocket &, sf::IpAddress, unsigned short );
   
    inline std::string get_last_package() { return last_package; }
    inline sf::Packet get_last_packet() { return packet_receive; } //tutaj go zwracam
};

void c_manager::receive_package( sf::UdpSocket & socket, sf::IpAddress sender, unsigned short sender_port ) { //tylko w tej metodzie jest zawartosc packet_receive;
    if( socket.receive( this->packet_receive, sender, sender_port ) == sf::Socket::Done ) {
        packet_receive >> last_package;
        //return this->packet_receive;
    } else {
        this->packet_receive << "Nothing packet";
        packet_receive >> last_package;
        //return this->packet_receive;
    }
}
Co do tej kopii obiektu. Co masz na myśli?
P-111628
DejaVu
» 2014-06-07 14:10:22
C/C++
packet_receive >> last_package;
Jesteś świadom co ta linijka robi?
P-111631
Rughailon
Temat założony przez niniejszego użytkownika
» 2014-06-07 14:24:51
Tak. Wyciągam pierwszą zapisaną zmienną, tutaj to będzie string typ_pakietu. Zapomniałem zmienić nazwę.

Typ mówi mi, co mam później zrobić z pakietem. Np. może to jest mapa i muszę ją zapisać to tablicy.
C/C++
if( search_string( get_last_type_packet(), "MAP" ) )
{ /*Odpowiednie operacje, jesli ostatni odebrany pakiet byl typu "MAP"*/ }
Tylko, jak mówiłem. Zapomniałem zmienić nazwę.
P-111632
DejaVu
» 2014-06-07 18:29:41
Skoro udaje Ci się poprawnie odczytać pakiet, a później nie jest on 'widoczny' to znaczy, że problemem jest Twoja klasa do zarządzania pakietami. Zapewne pracujesz na innym obiekcie niż Ci się wydaje.
P-111646
Rughailon
Temat założony przez niniejszego użytkownika
» 2014-06-07 22:18:55
Działa! Wprowadziłem kilka poprawek, ale rozwiązaniem było ustawienie public: 'sf::Packet packet_receive' i używanie bezpośrednio tej zmiennej. Tylko nadal nie rozumiem, czemu funkcja get nie działała, skoro zwracałem właśnie to samo.
P-111703
pekfos
» 2014-06-07 22:37:34
C/C++
inline sf::Packet & get_last_packet() { return packet_receive; } //tutaj go zwracam
A tak?
P-111709
1 « 2 » 3
Poprzednia strona Strona 2 z 3 Następna strona