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

问一个基本有关问题,关于申明

2012-02-16 
问一个基本问题,关于申明~这样写,可以编译classilist_item{public:ilist_item(intvalue,ilist_item*item0

问一个基本问题,关于申明~
这样写,可以编译
class   ilist_item{
public:
ilist_item(int   value,ilist_item   *item=0);
~ilist_item(){};
private:
int   _value;
ilist_item   *_next;
};

class   ilist{
public:
ilist():_at_front(0),_at_end(0),_size(0){}
void   insert(ilist_item   *ptr,   int   value);
int   size();

private:
//防止调用这两个函数,引发不必要的错误
ilist(const   ilist&);
ilist&   operator=(const   ilist&);
ilist_item   *_at_front;//定义了指针,没有调用构造函数
ilist_item   *_at_end;
int   _size;
};


这样写的话,编译的时候会提示ilist_item没有构造函数:
class   ilist_item;

class   ilist{
public:
ilist():_at_front(0),_at_end(0),_size(0){}
void   insert(ilist_item   *ptr,   int   value);
int   size();

private:
//防止调用这两个函数,引发不必要的错误
ilist(const   ilist&);
ilist&   operator=(const   ilist&);
ilist_item   *_at_front;//定义了指针,没有调用构造函数
ilist_item   *_at_end;
int   _size;
};

class   ilist_item{
public:
ilist_item(int   value,ilist_item   *item=0);
~ilist_item(){};
private:
int   _value;
ilist_item   *_next;
};


但是为什么没有提示我重复定义的错误呢?

把   class   ilist_item;改为:
extern   class   ilist_item;
出现一个警告:   warning   C4091:   “extern   ”   :   没有声明变量时忽略“ilist_item”的左侧
这个警告的意思是什么?



[解决办法]
第二种写法的第一行:class ilist_item;
只是一个声明,告诉编译器后面有这个的定义。所以不会有重复定义的错误
[解决办法]
而且我在VC2005中试过,第二种写法(不用extern)没错误啊
[解决办法]
class ilist_item;
这叫作类声明
包含{};的才叫作类定义
你试着的写一个class ilist_item{};就会提示了

热点排行