VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 652|回复: 3

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

[复制链接]

1

主题

2

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
发表于 2020-1-4 15:50:01 | 显示全部楼层 |阅读模式
这样写,可以编译
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”的左侧
这个警告的意思是什么?

回复

使用道具 举报

0

主题

17

帖子

11.00

积分

新手上路

Rank: 1

积分
11.00
发表于 2020-1-4 16:15:01 | 显示全部楼层
第二种写法的第一行:class ilist_item;
只是一个声明,告诉编译器后面有这个的定义。所以不会有重复定义的错误
回复

使用道具 举报

2

主题

54

帖子

34.00

积分

新手上路

Rank: 1

积分
34.00
发表于 2020-1-4 16:33:01 | 显示全部楼层
class ilist_item;
这叫作类声明
包含{};的才叫作类定义
你试着的写一个class ilist_item{};就会提示了
回复

使用道具 举报

1

主题

2

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
 楼主| 发表于 2020-1-5 09:33:01 | 显示全部楼层
回:cat00019

你将void insert(ilist_item *ptr, int value);实现了,里面用 new ilist_item(value,ptr)
就可以发现我说的错误了

回:diamond52

按理说给一个声明一个定义不会错的啊(函数是这样),为啥会在编译的时候会提示ilist_item没有构造函数.

不过类的话... 有点象数据类型.. 数据类型只有声明赋值..
...
呵呵,有点迷糊了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表