游戏开发论坛

 找回密码
 立即注册
搜索
查看: 4453|回复: 12

typedef怎么声明?

[复制链接]

96

主题

529

帖子

539

积分

高级会员

Rank: 4

积分
539
发表于 2006-8-26 20:00:00 | 显示全部楼层 |阅读模式
想声明一个typdef,而不是要定义typedef。我该怎么做?

例如,我的一个头文件:

class A
{
    ...
    string m_str;
};

我的这个头文件中引用到了string,而我不想#include <string>。这就意味着我要声明string,如果string仅仅是一个类的话,我可以直接这么声明:

class string;

但string不是一个class,而是是模板类basic_string<char>的typedef,我试着尝试如下语句声明:

typedef string;

可是编译通不过。

郁闷,我应该怎么做?谁能告诉我,感激不尽!!
[em6] [em6]

96

主题

529

帖子

539

积分

高级会员

Rank: 4

积分
539
 楼主| 发表于 2006-8-26 20:14:00 | 显示全部楼层

Re:typedef怎么声明?

郁闷,class可以声明,template可以声明,类型可以声明,为什么偏偏typedef不能声明

139

主题

2005

帖子

2057

积分

金牌会员

Rank: 6Rank: 6

积分
2057
QQ
发表于 2006-8-26 22:48:00 | 显示全部楼层

Re:typedef怎么声明?

typedef basic_string<char> string ?你要的是不是这个?

96

主题

529

帖子

539

积分

高级会员

Rank: 4

积分
539
 楼主| 发表于 2006-8-27 11:19:00 | 显示全部楼层

Re:typedef怎么声明?

这是定义,不是声明.
现在我要在不包含<string>的情况下声明string.

59

主题

1104

帖子

1199

积分

金牌会员

Rank: 6Rank: 6

积分
1199
发表于 2006-8-27 12:43:00 | 显示全部楼层

Re:typedef怎么声明?

....唉,基础知识啊。
typedef basic_string<char> string;
是正解,前提是你还需要basic_string这个摸版类的声明。

96

主题

529

帖子

539

积分

高级会员

Rank: 4

积分
539
 楼主| 发表于 2006-8-27 16:38:00 | 显示全部楼层

Re: Re:typedef怎么声明?

tarkey: Re:typedef怎么声明?

....唉,基础知识啊。
typedef basic_string<char> string;
是正解,前提是你还需要basic_string这个摸版类的声明。



这明显是错的啊。
试想,这个头文件还要被CPP文件包含,而包含它的CPP文件还要包含<string>,这就意味着CPP文件会有两句:typedef basic_string<char> string;
如果string是class,那么class string;是可以多次声明的。
但typedef basic_string<char> string;不是声明而是定义,编译器规定不能重复定义只能重复声明,所以用这种方法编译是不会通过的。

string的作用就是为了让basic_string透明,为程序员提供方便,而typedef basic_string<char> string;
又把string的内部暴露给开发者。那么又因此要给出basic_string类模板的声明。这种方法当然可行了。可我隐含的还明显有一个问题:我偏不这么做行吗?如果我想把文件编译依赖性搞得高,我就不会想到用前置声明的做法来降低文件编译依赖性。我今天也就不会问这个问题。

96

主题

529

帖子

539

积分

高级会员

Rank: 4

积分
539
 楼主| 发表于 2006-8-27 16:45:00 | 显示全部楼层

Re:typedef怎么声明?

Complie Error: typedef string redefined.

96

主题

529

帖子

539

积分

高级会员

Rank: 4

积分
539
 楼主| 发表于 2006-8-27 16:47:00 | 显示全部楼层

Re: Re:typedef怎么声明?

tarkey: Re:typedef怎么声明?

....唉,基础知识啊。
typedef basic_string<char> string;
是正解,前提是你还需要basic_string这个摸版类的声明。



typedef是定义,不是声明。证明(1):重复同类声明没有二义性。

class c;
class c;

而typedef可以有同类二义性:

typedef int INT;
typedef long INT;

再进一步,定义不可重复声明可以重复,证明(2):

typedef int INT;
typedef int INT;

编译时提示重复定义错误。

class c;
class c;
class c;

编译通过。

7

主题

438

帖子

438

积分

中级会员

Rank: 3Rank: 3

积分
438
发表于 2006-8-27 19:36:00 | 显示全部楼层

Re:typedef怎么声明?

目前C++没这种东西,以后也不会有。
typedef只是作为定义类型同义词的方法存在,向前声明必须用真正的名字。

96

主题

529

帖子

539

积分

高级会员

Rank: 4

积分
539
 楼主| 发表于 2006-8-27 21:01:00 | 显示全部楼层

Re:typedef怎么声明?

那太遗憾了。


楼上是第一个看明白我问题并给出我明确答案的人,谢谢

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

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-25 06:04

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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