添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
卖萌的红金鱼  ·  Building a Thread ...·  5 天前    · 
任性的开心果  ·  centOS ...·  1 周前    · 
刀枪不入的鞭炮  ·  RangeError when ...·  1 周前    · 
干练的水煮肉  ·  BigDecimal 类 ...·  7 月前    · 
任性的数据线  ·  Search by category ...·  1 年前    · 
小眼睛的课本  ·  python, ...·  1 年前    · 
Homme Profil pro
Second de cuisine
Inscrit en
Avril 2005
Messages
193
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Second de cuisine
Secteur : Alimentation

Informations forums :
Inscription : Avril 2005
Messages : 193
Points : 97
Points
97
Sélectionner tout - Visualiser dans une fenêtre à part
typedef std::vector<unsigned int> xbroadcasting_list;
Ainsi qu'une structure:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
    struct map__
        xbroadcasting_list broadcast;
M'aintenant je tente de supprimer un element de ce vecteur...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
            game::map__& old_map = //....
            old_map.broadcast.erase(std::find(std::begin(old_map.broadcast),
                                              std::end(old_map.broadcast),
                                              m_client_socket.getHandle()) // getHandle est de type unsigned int.
Et voici ce que C::B me retourne...
D:\C++\projects\Servers\Shared\Handler\PlayerChannelPacketHandler.cpp|37|warning: unused parameter 'packet' [-Wunused-parameter]|
D:\C++\projects\Servers\Shared\Handler\PlayerChannelPacketHandler.cpp||In member function 'const PacketHandler::post_handle PlayerChannelPacketHandler::use_portal(iopacket::Reader&)'
D:\C++\projects\Servers\Shared\Handler\PlayerChannelPacketHandler.cpp|92|error: no matching function for call to 'find(std::vector<unsigned int>::iterator, std::vector<unsigned int>::iterator, unsigned int)'|
D:\C++\projects\Servers\Shared\Handler\PlayerChannelPacketHandler.cpp|92|note: candidate is
c:\mingw\bin\..\lib\gcc\mingw32\4.7.2\include\c++\bits\streambuf_iterator.h|371|note: template<class _CharT2> typename __gnu_cxx::__enable_if<std::__is_char<_CharT2>::__value, std::istreambuf_iterator<_CharT2, std::char_traits<_CharT> > >::__type std::find(std::istreambuf_iterator<_CharT2, std::char_traits<_CharT> >, std::istreambuf_iterator<_CharT2, std::char_traits<_CharT> >, const _CharT2&)|
c:\mingw\bin\..\lib\gcc\mingw32\4.7.2\include\c++\bits\streambuf_iterator.h|371|note: template argument deduction/substitution failed
D:\C++\projects\Servers\Shared\Handler\PlayerChannelPacketHandler.cpp|92|note: '__gnu_cxx::__normal_iterator<unsigned int*, std::vector<unsigned int> >' is not derived from 'std::istreambuf_iterator<_CharT2, std::char_traits<_CharT> >'|
||=== Build finished: 1 errors, 1 warnings (0 minutes, 2 seconds) ===|
Femme Profil pro
Ingénieur développement logiciels
Inscrit en
Juin 2007
Messages
5 184
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France, Essonne (Île de France)

Informations professionnelles :
Activité : Ingénieur développement logiciels

Informations forums :
Inscription : Juin 2007
Messages : 5 184
Points : 17 118
Points
17 118
Mes principes de bases du codeur qui veut pouvoir dormir:
  • Une variable de moins est une source d'erreur en moins.
  • Un pointeur de moins est une montagne d'erreurs en moins.
  • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
  • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
  • La plus sotte des questions est celle qu'on ne pose pas.
Pour faire des graphes, essayez yEd.
le ter nel est le titre porté par un de mes personnages de jeu de rôle
Sélectionner tout - Visualiser dans une fenêtre à part
typedef std::vector<unsigned int> xbroadcasting_list;
Ainsi qu'une structure:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
    struct map__
        xbroadcasting_list broadcast;
M'aintenant je tente de supprimer un element de ce vecteur...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
            game::map__& old_map = //....
            old_map.broadcast.erase(std::find(std::begin(old_map.broadcast),
                                              std::end(old_map.broadcast),
                                              m_client_socket.getHandle()) // getHandle est de type unsigned int.
Et voici ce que C::B me retourne...
t'as pas tout simplement oublié #include <algorithm> ?
Sinon à part cela, ton code est dangereux et ne fera pas forcément ce que tu espère : std:find renvoie un itérateur à la position de l'élement trouvé, s'il est trouvé, sinon elle te renvoie l'itérateur que tu as fourni en argument "last".
Autrement dit, à chaque fois que tu essaiera de supprimer un élément, s'il n'existe pas, tu supprimeras le dernier de ton vector.
Enfin, je ne sais pas si std:remove est la bonne solution également. N'oublies pas que std:remove va supprimer toutes les valeurs égales à value qu'il trouve.. si tes "handles" sont à Id unique, ça posera pas de problème, mais vaut mieux que tu sois sur de ce que tu fais
Egalement, tu peux éviter d'utiliser les "__" dans tes noms de structure, de classe, ou d'attributs, etc, car ce sont des nomenclatures réservées au compilateur, et ça risquerait de créer des conflits.
Femme Profil pro
Ingénieur développement logiciels
Inscrit en
Juin 2007
Messages
5 184
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France, Essonne (Île de France)

Informations professionnelles :
Activité : Ingénieur développement logiciels

Informations forums :
Inscription : Juin 2007
Messages : 5 184
Points : 17 118
Points
17 118
Mes principes de bases du codeur qui veut pouvoir dormir:
  • Une variable de moins est une source d'erreur en moins.
  • Un pointeur de moins est une montagne d'erreurs en moins.
  • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
  • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
  • La plus sotte des questions est celle qu'on ne pose pas.
Pour faire des graphes, essayez yEd.
le ter nel est le titre porté par un de mes personnages de jeu de rôle
Homme Profil pro
tech lead c++ linux
Inscrit en
Août 2004
Messages
4 262
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Ain (Rhône Alpes)

Informations professionnelles :
Activité : tech lead c++ linux

Informations forums :
Inscription : Août 2004
Messages : 4 262
Points : 6 680
Points
6 680
Billets dans le blog
2
« L'effort par lequel toute chose tend à persévérer dans son être n'est rien de plus que l'essence actuelle de cette chose. »
Spinoza — Éthique III, Proposition VII
Homme Profil pro
Second de cuisine
Inscrit en
Avril 2005
Messages
193
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Second de cuisine
Secteur : Alimentation

Informations forums :
Inscription : Avril 2005
Messages : 193
Points : 97
Points
97
Algorithm: non
Pour le find, ne t'inquietes pas, l'element EST dans la map, obligatoirement !
De plus, le handle est unique, c'est un numéro de socket !
Enfin, la struct map__ se trouve dans un namespace nommé correctement, donc aucun soucis de ce côté également !
Si je te demandais ça c'est parce que pour moi rien ne cloche dans ton code (en tout cas à part ce que moi et les autres avons déjà dit).
J'ai vérifié et je te confirme que tout va bien avec le code ci dessous. Du coup il ne reste que l'oubli d'inclure le header contenant la déclaration de std::find, ce qui explique le message 'call to undefined'
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
 
#include <vector>
#include <algorithm>
#include <iostream>
typedef std::vector<unsigned int> uiVector;
struct MyStruct
    uiVector myVec;
void printVector(MyStruct s)
    for (auto i : s.myVec)
        std::cout << i << " ";
    std::cout << std::endl;
int main()
    MyStruct s;
    s.myVec = {10,20,30,40,50,20,30,50,60};
    s.myVec.erase(std::find(s.myVec.begin(),s.myVec.end(),50));
    printVector(s);
    return 0;
//Output :
10 20 30 40 20 30 50 60
Néanmoins, dans ton cas utiliser l'idiome "erase-remove" est adapté donc suis les conseil de r0d ^^
Homme Profil pro
Développeur de jeux vidéo
Inscrit en
Octobre 2010
Messages
738
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Puy de Dôme (Auvergne)

Informations professionnelles :
Activité : Développeur de jeux vidéo
Secteur : Tourisme - Loisirs

Informations forums :
Inscription : Octobre 2010
Messages : 738
Points : 3 892
Points
3 892
Femme Profil pro
Ingénieur développement logiciels
Inscrit en
Juin 2007
Messages
5 184
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France, Essonne (Île de France)

Informations professionnelles :
Activité : Ingénieur développement logiciels

Informations forums :
Inscription : Juin 2007
Messages : 5 184
Points : 17 118
Points
17 118
Mes principes de bases du codeur qui veut pouvoir dormir:
  • Une variable de moins est une source d'erreur en moins.
  • Un pointeur de moins est une montagne d'erreurs en moins.
  • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
  • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
  • La plus sotte des questions est celle qu'on ne pose pas.
Pour faire des graphes, essayez yEd.
le ter nel est le titre porté par un de mes personnages de jeu de rôle

Vous avez un bloqueur de publicités installé.

Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.

Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.