先貼代碼
[cpp]
void Insert2NodeAlign(int n1,int n2,int n3,int id)
{
Node_align DFStmp=Node_align(n1,false,n2,n3,id);
DFSNL_i=DFS_Nlist.find(Node_align(DFStmp));
if (DFSNL_i!=DFS_Nlist.end())
{
<SPAN style="COLOR: #ff0000">DFSNL_i->insert2ElementBelong(n2);</SPAN>
}
else
{
DFS_Nlist.insert(DFStmp);
}
}
void Insert2NodeAlign(int n1,int n2,int n3,int id)
{
Node_align DFStmp=Node_align(n1,false,n2,n3,id);
DFSNL_i=DFS_Nlist.find(Node_align(DFStmp));
if (DFSNL_i!=DFS_Nlist.end())
{
DFSNL_i->insert2ElementBelong(n2);
}
else
{
DFS_Nlist.insert(DFStmp);
}
}
此處會出現錯誤:1>surfaceFlat.cpp(21): error C2662: “Node_align::insert2ElementBelong”: 不能將“this”指針從“const Node_align”轉換為“Node_align &”
1> 轉換丟失限定符
解決方法:
[cpp]
Node_align &n = const_cast<Node_align&>(*DFSNL_i);
n.insert2ElementBelong(id);
Node_align &n = const_cast<Node_align&>(*DFSNL_i);
n.insert2ElementBelong(id);
之前在VC6下做好像不會出現這個問題,剛剛看STL裡面的源代碼,好像set的基類(那個紅黑樹)中的operator*和operator->都變成const函數,沒找到非const版本,所以會有這種情況發生;很有可能是平台更嚴格了