Veuillez considérer le code suivant où j'obtiens une violation d'accès en insérant des valeurs dans un objet std :: map. Pas certain de pourquoi. Le code que vous voyez qu'il utilisepointeur vers std :: problème de carte
std::map<int, int>
cependant, j'ai d'abord essayé
std::map<int, MSGTYPE>
avec la même violation d'accès résultant. (Je sais que les enums sont des INT).
// a common include file has this
// common.h
enum MSGTYPE
{
MSG_R1,
MSG_A1,
MSG_L1,
MSG_S1,
MSG_S2
};
typedef std::map<int, int> SYSMsgMap;
typedef struct _MYOBJ
{
int x1;
int x2;
SYSMsgMap XFerMap;
}MYOBJ;
Mon utilisation de ces structures ressemble donc:
MYOBJ *cMYOBJ::AddNetwork(cvnet *net)
{
MYOBJ *ob;
ob = new MYOBJ();
// initialization code removed for this post/brevity
BuildMsgMap(ob->XFerMap);
// rest removed for this post/brevity
}
void cMYOBJ::BuildMsgMap(std::map<int, int> &mm)
{
mm.clear();
switch(NETTYPE)
{
case 1:
mm[ 1] = MSG_R1; <-- Access violation here!
mm[ 2] = MSG_A1;
mm[ 4] = MSG_L1;
mm[16] = MSG_S1;
mm[32] = MSG_S2;
break;
// rest removed...
}
Je n'ai aucune idée de ce que vous voulez dire. – Eric
@Amend, alors s'il vous plaît arrêter de perdre mon temps. – Eric
Je ne vois pas de raison à cet échec. Je soupçonne que du code commenté pourrait corrompre cet objet. - Pour clarifier le commentaire d'Armen: On peut voir une grande influence du style plain-C dans ce C++. En particulier, vous pouvez déclarer 'struct MYOBJ {...};' (sans typedef et nom de fin) avec exactement le même effet en C++. Vous ne pouviez pas faire cela en C. – CygnusX1