Bienvenue, Invité. Merci de vous connecter ou de vous inscrire.
Avez-vous perdu votre e-mail d'activation ?

Auteur Sujet: [SFML2.0]Erreur buffer.assign avec les fonctions getData et getDataSize  (Lu 2969 fois)

0 Membres et 1 Invité sur ce sujet

Lolilolight

  • Hero Member
  • *****
  • Messages: 1232
    • Voir le profil
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.
« Modifié: Janvier 23, 2013, 03:44:46 pm par Lolilolight »

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32504
    • Voir le profil
    • SFML's website
    • E-mail
Re : [SFML2.0]Erreur buffer.assign avec les fonctions getData et getDataSize
« Réponse #1 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).
Laurent Gomila - SFML developer

Lolilolight

  • Hero Member
  • *****
  • Messages: 1232
    • Voir le profil
Re : [SFML2.0]Erreur buffer.assign avec les fonctions getData et getDataSize
« Réponse #2 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++ ?
« Modifié: Janvier 24, 2013, 10:22:51 am par Lolilolight »

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32504
    • Voir le profil
    • SFML's website
    • E-mail
Re : [SFML2.0]Erreur buffer.assign avec les fonctions getData et getDataSize
« Réponse #3 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
Laurent Gomila - SFML developer

Lolilolight

  • Hero Member
  • *****
  • Messages: 1232
    • Voir le profil
Re : [SFML2.0]Erreur buffer.assign avec les fonctions getData et getDataSize
« Réponse #4 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. ^^

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32504
    • Voir le profil
    • SFML's website
    • E-mail
Re : [SFML2.0]Erreur buffer.assign avec les fonctions getData et getDataSize
« Réponse #5 le: Janvier 25, 2013, 08:43:34 am »
Parce que ;D
Laurent Gomila - SFML developer

Lolilolight

  • Hero Member
  • *****
  • Messages: 1232
    • Voir le profil
Re : [SFML2.0]Erreur buffer.assign avec les fonctions getData et getDataSize
« Réponse #6 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. :/

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32504
    • Voir le profil
    • SFML's website
    • E-mail
Re : [SFML2.0]Erreur buffer.assign avec les fonctions getData et getDataSize
« Réponse #7 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());
Laurent Gomila - SFML developer

Lolilolight

  • Hero Member
  • *****
  • Messages: 1232
    • Voir le profil
Re : [SFML2.0]Erreur buffer.assign avec les fonctions getData et getDataSize
« Réponse #8 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.
« Modifié: Janvier 26, 2013, 03:15:32 pm par Lolilolight »

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32504
    • Voir le profil
    • SFML's website
    • E-mail
Re : [SFML2.0]Erreur buffer.assign avec les fonctions getData et getDataSize
« Réponse #9 le: Janvier 26, 2013, 04:49:07 pm »
Comme tu le sens.
Laurent Gomila - SFML developer

Lolilolight

  • Hero Member
  • *****
  • Messages: 1232
    • Voir le profil
Re : [SFML2.0]Erreur buffer.assign avec les fonctions getData et getDataSize
« Réponse #10 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. ^^