error C2662: 不能将“this”指针从“const Node_align”转换为“Node_align &”解决方案

2014-11-24 02:02:58 · 作者: · 浏览: 1

先贴代码


[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())
{

DFSNL_i->insert2ElementBelong(n2);
}
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(*DFSNL_i);

n.insert2ElementBelong(id);

Node_align &n = const_cast(*DFSNL_i);

n.insert2ElementBelong(id);
之前在VC6下做好像不会出现这个问题,刚刚看STL里面的源代码,好像set的基类(那个红黑树)中的operator*和operator->都变成const函数,没找到非const版本,所以会有这种情况发生;很有可能是平台更严格了