65,187
社区成员




struct C_Node
{
LONG lID;
BYTE bDieCt;
CHAR cNode[16];
UINTPnt pnt;
INT iF;
INT iG;
INT iH;
struct C_Node *pFather;
//1
C_Node()
{
memset(this, 0, sizeof(C_Node));
}
//2
C_Node()
{
this->lSegmentID = 0;
this->bDieCt = 0;
memset(this->cNode,0,16);
memset(&(this->pnt),0,sizeof(UINTPnt));
this->iF = 0;
this->iG = 0;
this->iH = 0;
this->pnodeFather = new C_Node;
}
//3
C_Node():lSegmentID(0),bDieCt(0),cNode(0),pnt(0),iF(0),iG(0),iH(0),pnodeFather(NULL)
{
}
};
RC_Node():lSegmentID(0),bDierct(0),cNode(0),pnt(0),iF(0),iG(0),iH(0),pnodeFather(NULL)
{
memset(this, 0, sizeof(RC_Node));
}
我这里编译报错:error C2536: “RC_Node::RC_Node::cNode”: 无法指定数组的显式初始值设定项
C_Node():lSegmentID(0),bDieCt(0),pnt(0),iF(0),iG(0),iH(0),pnodeFather(NULL){
memset(cNode, 0 ,sizeof(cNode));
}
这样通不过编译??2 最后一行无限递归了 3 本质上和1一样,就是cNode是数组不能直接用一个0来初始化 这种结点本来就不应该在初始化的时候就分配好下一个结点的,应该构造好结点再指过去,你的理解就有问题
“变量赋值”和“变量初始化”不是一回事! “变量赋值”发生在运行期,其写法遵循赋值语法规定。 “变量初始化”发生在编译期或运行期,其写法遵循初始化列表语法规定。
第三种cNode数组放在函数中初始化就可以了。。
2 最后一行无限递归了 3 本质上和1一样,就是cNode是数组不能直接用一个0来初始化 这种结点本来就不应该在初始化的时候就分配好下一个结点的,应该构造好结点再指过去,你的理解就有问题