|
这样写,可以编译
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”的左侧
这个警告的意思是什么?
|
|