請考慮下面的代碼,在這裏我得到一個將值插入std :: map對象的訪問衝突。不知道爲什麼。如您所見,該代碼使用指向std :: map的指針
std::map<int, int>
然而
,我最初試圖
std::map<int, MSGTYPE>
具有相同導致訪問衝突。 (我知道枚舉是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;
我的這些結構的使用看起來像這樣:
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...
}
我不知道你的意思。 – Eric
@修改,所以請不要浪費我的時間。 – Eric
我沒有看到失敗的原因。我懷疑一些註釋掉的代碼可能會破壞這個對象。 - 澄清Armen的評論:在這個C++中可以看到純C風格的巨大影響力。特別是你可以在C++中聲明'struct MYOBJ {...};'(沒有typedef和尾部名稱),它的效果完全相同。您無法在C中執行此操作。 – CygnusX1