Forum de la communauté SFML

Aide => Réseau => Discussion démarrée par: Lolilolight le Janvier 23, 2013, 03:10:51 pm

Titre: [SFML2.0]Erreur buffer.assign avec les fonctions getData et getDataSize
Posté par: Lolilolight le Janvier 23, 2013, 03:10:51 pm
J'ai une erreur en compilation à cette ligne ici.

buffer.assign(getData(), getData() + getDataSize());

Il me marque ça :

/usr/Projets/SorrokSrv/NetworkEngine/encryptedPacket.h|9|warning: deprecated covariant return type for ‘virtual const char* EncryptedPacket::onSend(std::size_t&)’ [enabled by default]|
/usr/local/include/SFML/Network/Packet.hpp|234|warning:   overriding ‘virtual const void* sf::Packet::onSend(std::size_t&)’ [enabled by default]|
/usr/Projets/SorrokSrv/NetworkEngine/encryptedPacket.cpp||In member function ‘virtual const char* EncryptedPacket::onSend(size_t&)’:|
/usr/Projets/SorrokSrv/NetworkEngine/encryptedPacket.cpp|8|warning: pointer of type ‘void *’ used in arithmetic [-Wpointer-arith]|
/usr/Projets/SorrokSrv/NetworkEngine/encryptedPacket.cpp||In member function ‘virtual void EncryptedPacket::onReceive(const char*, size_t)’:|
/usr/Projets/SorrokSrv/NetworkEngine/encryptedPacket.cpp|30|warning: comparison between signed and unsigned integer expressions [-Wsign-compare]|
/usr/include/c++/4.6/bits/stl_vector.h:1159|24|instantiated from ‘void std::vector<_Tp, _Alloc>::_M_assign_dispatch(_InputIterator, _InputIterator, std::__false_type) [with _InputIterator = const void*, _Tp = char, _Alloc = std::allocator<char>]’|
/usr/include/c++/4.6/bits/stl_vector.h:433|4|instantiated from ‘void std::vector<_Tp, _Alloc>::assign(_InputIterator, _InputIterator) [with _InputIterator = const void*, _Tp = char, _Alloc = std::allocator<char>]’|
/usr/Projets/SorrokSrv/NetworkEngine/encryptedPacket.cpp:8|55|instantiated from here|
/usr/include/c++/4.6/bits/stl_iterator_base_types.h|193|error: forming reference to void|
/usr/include/c++/4.6/bits/stl_iterator_base_funcs.h||In function ‘typename std::iterator_traits<_Iterator>::difference_type std::__distance(_RandomAccessIterator, _RandomAccessIterator, std::random_access_iterator_tag) [with _RandomAccessIterator = const void*, typename std::iterator_traits<_Iterator>::difference_type = long int]’:|
/usr/include/c++/4.6/bits/stl_iterator_base_funcs.h:117|42|instantiated from ‘typename std::iterator_traits<_Iterator>::difference_type std::distance(_InputIterator, _InputIterator) [with _InputIterator = const void*, typename std::iterator_traits<_Iterator>::difference_type = long int]’|
/usr/include/c++/4.6/bits/vector.tcc:241|55|instantiated from ‘void std::vector<_Tp, _Alloc>::_M_assign_aux(_ForwardIterator, _ForwardIterator, std::forward_iterator_tag) [with _ForwardIterator = const void*, _Tp = char, _Alloc = std::allocator<char>]’|
/usr/include/c++/4.6/bits/stl_vector.h:1160|4|instantiated from ‘void std::vector<_Tp, _Alloc>::_M_assign_dispatch(_InputIterator, _InputIterator, std::__false_type) [with _InputIterator = const void*, _Tp = char, _Alloc = std::allocator<char>]’|
/usr/include/c++/4.6/bits/stl_vector.h:433|4|instantiated from ‘void std::vector<_Tp, _Alloc>::assign(_InputIterator, _InputIterator) [with _InputIterator = const void*, _Tp = char, _Alloc = std::allocator<char>]’|
/usr/Projets/SorrokSrv/NetworkEngine/encryptedPacket.cpp:8|55|instantiated from here|
/usr/include/c++/4.6/bits/stl_iterator_base_funcs.h|96|error: invalid use of ‘const void’|
/usr/include/c++/4.6/bits/stl_uninitialized.h:119|41|instantiated from ‘_ForwardIterator std::uninitialized_copy(_InputIterator, _InputIterator, _ForwardIterator) [with _InputIterator = const void*, _ForwardIterator = char*]’|
/usr/include/c++/4.6/bits/stl_uninitialized.h:259|63|instantiated from ‘_ForwardIterator std::__uninitialized_copy_a(_InputIterator, _InputIterator, _ForwardIterator, std::allocator<_Tp>&) [with _InputIterator = const void*, _ForwardIterator = char*, _Tp = char]’|
/usr/include/c++/4.6/bits/vector.tcc:262|6|instantiated from ‘void std::vector<_Tp, _Alloc>::_M_assign_aux(_ForwardIterator, _ForwardIterator, std::forward_iterator_tag) [with _ForwardIterator = const void*, _Tp = char, _Alloc = std::allocator<char>]’|
/usr/include/c++/4.6/bits/stl_vector.h:1160|4|instantiated from ‘void std::vector<_Tp, _Alloc>::_M_assign_dispatch(_InputIterator, _InputIterator, std::__false_type) [with _InputIterator = const void*, _Tp = char, _Alloc = std::allocator<char>]’|
/usr/include/c++/4.6/bits/stl_vector.h:433|4|instantiated from ‘void std::vector<_Tp, _Alloc>::assign(_InputIterator, _InputIterator) [with _InputIterator = const void*, _Tp = char, _Alloc = std::allocator<char>]’|
/usr/Projets/SorrokSrv/NetworkEngine/encryptedPacket.cpp:8|55|instantiated from here|
/usr/include/c++/4.6/bits/stl_uninitialized.h|76|error: ISO C++ forbids incrementing a pointer of type ‘const void*’ [-fpermissive]|
/usr/include/c++/4.6/bits/stl_uninitialized.h:119|41|instantiated from ‘_ForwardIterator std::uninitialized_copy(_InputIterator, _InputIterator, _ForwardIterator) [with _InputIterator = const void*, _ForwardIterator = char*]’|
/usr/include/c++/4.6/bits/stl_uninitialized.h:259|63|instantiated from ‘_ForwardIterator std::__uninitialized_copy_a(_InputIterator, _InputIterator, _ForwardIterator, std::allocator<_Tp>&) [with _InputIterator = const void*, _ForwardIterator = char*, _Tp = char]’|
/usr/include/c++/4.6/bits/vector.tcc:262|6|instantiated from ‘void std::vector<_Tp, _Alloc>::_M_assign_aux(_ForwardIterator, _ForwardIterator, std::forward_iterator_tag) [with _ForwardIterator = const void*, _Tp = char, _Alloc = std::allocator<char>]’|
/usr/include/c++/4.6/bits/stl_vector.h:1160|4|instantiated from ‘void std::vector<_Tp, _Alloc>::_M_assign_dispatch(_InputIterator, _InputIterator, std::__false_type) [with _InputIterator = const void*, _Tp = char, _Alloc = std::allocator<char>]’|
/usr/include/c++/4.6/bits/stl_vector.h:433|4|instantiated from ‘void std::vector<_Tp, _Alloc>::assign(_InputIterator, _InputIterator) [with _InputIterator = const void*, _Tp = char, _Alloc = std::allocator<char>]’|
/usr/Projets/SorrokSrv/NetworkEngine/encryptedPacket.cpp:8|55|instantiated from here|
/usr/include/c++/4.6/bits/stl_uninitialized.h|77|error: ‘const void*’ is not a pointer-to-object type|
/usr/include/c++/4.6/bits/stl_algobase.h:384|70|instantiated from ‘_OI std::__copy_move_a(_II, _II, _OI) [with bool _IsMove = false, _II = const void*, _OI = char*]’|
/usr/include/c++/4.6/bits/stl_algobase.h:422|39|instantiated from ‘_OI std::__copy_move_a2(_II, _II, _OI) [with bool _IsMove = false, _II = const void*, _OI = char*]’|
/usr/include/c++/4.6/bits/stl_algobase.h:454|18|instantiated from ‘_OI std::copy(_II, _II, _OI) [with _II = const void*, _OI = char*]’|
/usr/include/c++/4.6/bits/vector.tcc:256|4|instantiated from ‘void std::vector<_Tp, _Alloc>::_M_assign_aux(_ForwardIterator, _ForwardIterator, std::forward_iterator_tag) [with _ForwardIterator = const void*, _Tp = char, _Alloc = std::allocator<char>]’|
/usr/include/c++/4.6/bits/stl_vector.h:1160|4|instantiated from ‘void std::vector<_Tp, _Alloc>::_M_assign_dispatch(_InputIterator, _InputIterator, std::__false_type) [with _InputIterator = const void*, _Tp = char, _Alloc = std::allocator<char>]’|
/usr/include/c++/4.6/bits/stl_vector.h:433|4|instantiated from ‘void std::vector<_Tp, _Alloc>::assign(_InputIterator, _InputIterator) [with _InputIterator = const void*, _Tp = char, _Alloc = std::allocator<char>]’|
/usr/Projets/SorrokSrv/NetworkEngine/encryptedPacket.cpp:8|55|instantiated from here|
/usr/include/c++/4.6/bits/stl_algobase.h|327|error: invalid use of ‘const void’|
/usr/include/c++/4.6/bits/stl_algobase.h|329|error: ‘const void*’ is not a pointer-to-object type|
/usr/include/c++/4.6/bits/stl_algobase.h|330|error: ISO C++ forbids incrementing a pointer of type ‘const void*’ [-fpermissive]|
||=== Build finished: 7 errors, 4 warnings ===|

Hors que avec la SFML 1.6 ça marchait nickel.
Titre: Re : [SFML2.0]Erreur buffer.assign avec les fonctions getData et getDataSize
Posté par: Laurent le Janvier 23, 2013, 06:58:46 pm
Ca marchait avec char*, mais maintenant c'est void* (regarde la doc et les messages d'erreur).
Titre: Re : [SFML2.0]Erreur buffer.assign avec les fonctions getData et getDataSize
Posté par: Lolilolight le Janvier 24, 2013, 09:38:00 am
Ha ok, merci. :)

PS : J'ai changé en void*, mais il y a un conflit avec la stl à la conversion du pointeur void* en référence T& et il me met toujours cette même erreur. :/

Ne vaudrait t'il pas mieux utiliser les template plutôt que des void* pour la compatibilité avec le c++ ?
Titre: Re : [SFML2.0]Erreur buffer.assign avec les fonctions getData et getDataSize
Posté par: Laurent le Janvier 24, 2013, 02:34:17 pm
Tu ne peux pas déréférencer un void* (ça donnerait une variable de type void, ce qui n'existe pas), ce qui arrive quand tu fais la copie. Il faut caster en char*.

Quant aux templates en type de retour, ce serait pas terrible :P
Titre: Re : [SFML2.0]Erreur buffer.assign avec les fonctions getData et getDataSize
Posté par: Lolilolight le Janvier 25, 2013, 08:33:54 am
Ok, je n'ai juste pas très bien compris, pourquoi avoir passé à des pointeurs sur void, les char me semblaient bien. ^^
Titre: Re : [SFML2.0]Erreur buffer.assign avec les fonctions getData et getDataSize
Posté par: Laurent le Janvier 25, 2013, 08:43:34 am
Parce que ;D
Titre: Re : [SFML2.0]Erreur buffer.assign avec les fonctions getData et getDataSize
Posté par: Lolilolight le Janvier 25, 2013, 02:12:33 pm
Ok, je pense que je vais revenir à la SFML 1.6 et attendre un peu avant que les tutoriels de la SFML 2.0 sortent car sans tutoriels je ne m'en sors pas. :/
C'est un peu comme java entreprise édition et jboss que j'ai du utiliser avec éclipse mais ou il n'y avait aucun tutoriel sur internet donc je n'y arrivais pas. :/
Titre: Re : [SFML2.0]Erreur buffer.assign avec les fonctions getData et getDataSize
Posté par: Laurent le Janvier 25, 2013, 05:40:48 pm
En même temps, il n'y aura pas ça dans les tutoriels :

const char* data = static_cast<const char*>(getData());
buffer.assign(data, data + getDataSize());
Titre: Re : [SFML2.0]Erreur buffer.assign avec les fonctions getData et getDataSize
Posté par: Lolilolight le Janvier 26, 2013, 03:13:57 pm
J'avais essayer un truc du genre mais, ça ne passais pas non plus bref, de toute façon, j'ai une préférence pour la SFML 1.6 quand même qui me suffit amplement pour l'instant. ^^
La flemme de changer tout mon code. ^^
Ca m'étonne que tu me dise ça car dans la SFML 1.6 il y avais bien un tutoriel sur ça.
Titre: Re : [SFML2.0]Erreur buffer.assign avec les fonctions getData et getDataSize
Posté par: Laurent le Janvier 26, 2013, 04:49:07 pm
Comme tu le sens.
Titre: Re : [SFML2.0]Erreur buffer.assign avec les fonctions getData et getDataSize
Posté par: Lolilolight le Février 03, 2013, 10:38:13 am
Finalement j'ai réussi, j'avais bien mis un static_cast sur le getData() mais j'avais oublié de le mettre sur le getData() de getData() + getDataSize(). ^^
Finalement  j'ai fait comme toi et ça marche. ^^