首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

为什么警告this,该怎么处理

2012-03-18 
为什么警告this#ifndefDLINK_H#defineDLINK_H//(c)ChenYu2007.4.29classDLink{public:DLink(inti_d):p_pre

为什么警告this
#ifndef   DLINK_H
#define   DLINK_H
//(c)   ChenYu   2007.4.29

class   DLink
{
public:
DLink(int   i_d):p_prev(this),p_next(this),id(i_d){}//问题
int   Id()   const   {return   id;}
DLink     const   *Next()   const   {return   p_next;}
DLink   *Next()   {return   p_next;}
void   SetNext(DLink   *next){p_next=next;}
DLink   const   *Prev()   const{return   p_prev;}
DLink   *Prev(){return   p_prev;}
void   SetPrev(DLink   *prev){p_prev=prev;}
void   Unlink();
private:
int   id;
DLink   *p_prev;
DLink   *p_next;
};

#endif

为什么编译器警告我this有问题,用的是VS2005

[解决办法]
正常。因为构造函数还没有完成,通过this调用任何东西都可能触发bug。
于你此处,没有问题的,可以忽略这个warning。
[解决办法]
初始化时,用NULL比较好拔。
[解决办法]
编译器具体给出的错误贴上来看看?
我用gcc测试的warning是初始化列表和变量在类中被定义的顺序不一样,有可能会造成问题。

[解决办法]
初始化列表中的数据是在类构建之前。此时this指针没有意义
[解决办法]
这只是一个警告,而实际上在你这种情况下,这个警告不应该出。属于VS2005编译器比较弱导致的。
该警告的原意是为了避免对象还没有初始化完成时,就去引用它的数据成员。
但是,楼主初始化列表中p_prev及p_next都属于内置类型,完全不存在上面说的这个问题。

以上纯属猜测,楼主问问题应当把编译器信息贴出来,因为不是每个人都恰好有VS2005。

热点排行