| 编程中国 | 业界新闻 | 技术文章 | 视频教程 | 下载频道 | 程序源码 | 个人空间 | 编程论坛
全能ASP/PHP/ASP.NET主机,支持月付专业 MSSQL 数据库空间,支持月付专业 MySQL 数据库空间,支持月付买域名,送MP3、MP4
高端软件开发 = 年薪十万不是梦赛孚耐:软件保护加密专家身份认证令牌USB KEY买空间,免费送域名(厦门中资源)
共有 255 人关注过本帖
标题:前项引用声明
收藏  订阅  推荐  打印 
cclearner
Rank: 2
等级:注册会员
帖子:74
积分:840
注册:2007-6-28
前项引用声明

前项引用声明一个类以后,在没声明完整类之前能做什么?
可以声明此类的指针,但对象就不行。可以此类的形参,但是具体到底可以做那一些呢?
搜索更多相关主题的帖子: 声明  此类  形参  指针  对象  
2007-7-5 21:02
cclearner
Rank: 2
等级:注册会员
帖子:74
积分:840
注册:2007-6-28

没人能指点一下迷津么?
我的前项引用声明。。。。。。

好人哪,一群好人哪!!!!!!
2007-7-5 23:50
野比
Rank: 12Rank: 12Rank: 12
等级:贵宾
威望:14
帖子:990
积分:10576
注册:2007-5-24

没时间了... 明晚来看看... 估计HJin, aipb等很快能给你回答...
祝顺利解决...

2007-7-5 23:58
HJin
Rank: 12Rank: 12Rank: 12
等级:贵宾
威望:27
帖子:401
积分:4134
注册:2007-6-9
回复:(cclearner)前项引用声明

/*---------------------------------------------------------------------------
File name: declVSdefn.cpp
Author: HJin (email: fish_sea_bird [at] yahoo [dot] com )
Created on: 7/5/2007 15:18:47
Environment: Windows XP Professional SP2 English +
Visual Studio 2005 v8.0.50727.762

Modification history:
===========================================================================


The following code compiles under MS VS 2005.

defn === definition
decl === declaration

forward decl is used when you need to know the name
of a type before the defn of that type.

If you don't have defn of a type, you can only play with the type name.
You cannot do anything that is meaningful for that type, simply because
you cannot construct an object of that type.

*/

#include <iostream>
#include <string>

using namespace std;


class B; // forward decl

class A
{
public:
void f(B& rObjB, B* pObjB, B objB); // ok --- you declare f() instead of define

/**
wrong --- you are defining g(). need to define B first.
*/
/*
void g(B& rObjB, B* pObjB, B objB)
{

}
*/

private:
//B objB; // wrong --- need to know the defn to allocate memory space for objB
B& rObjB; // reference --- ok
B* pObjB; // pointer --- ok
static B sObjB; // static --- ok

};

int main(int argc, char** argv)
{

return 0;
}


I am working on a system which has no Chinese input. Please don\'t blame me for typing English.
2007-7-6 06:20
aipb2007
Rank: 12Rank: 12Rank: 12
来自:CQU
等级:贵宾
威望:40
帖子:2881
积分:29414
注册:2007-3-18

ls的分析很完整了,你看不懂的话,我就说说:

我的理解是这样的,前项声明类时,该类并没有定义。
所以任何试图给这个类分配内存的操作将导致错误。

简单的说就是定义一个对象不允许。
然而,定义指向该类的指针和引用是允许的。
作为成员函数原型声明中参数和返回类型也可以,但是这是仅能声明,不能定义。

Fight  to win  or  die...
2007-7-6 11:34
孤魂居士
Rank: 4
来自:老A(中国地大)
等级:高级会员
威望:2
帖子:869
积分:8838
注册:2007-5-21


又学了个知识

想用3年成为编程高手10年都成不了,准备用10年成为编程高手的3年就成为了编程高手
2007-7-6 15:32
cclearner
Rank: 2
等级:注册会员
帖子:74
积分:840
注册:2007-6-28

哦,三位斑竹的回答,我明白了哦!不知能不能实际应用的好。
嗯,HJin的英文看懂了,不过有一点不明白。
为什么private里static的行,不是static的就不行呢?
thank you

好人哪,一群好人哪!!!!!!
2007-7-6 16:06
aipb2007
Rank: 12Rank: 12Rank: 12
来自:CQU
等级:贵宾
威望:40
帖子:2881
积分:29414
注册:2007-3-18
回复:(cclearner)哦,三位斑竹的回答,我明白了哦!...

知道static声明定义是分开的吧?

比如在类里
static B sObjB; //这仅仅声明
类外
B A::sObjB; //这是定义,在这时sObjB才会被分配内存
//并且,这个定义要正确,必须在类B定义之后

Fight  to win  or  die...
2007-7-6 16:18
cclearner
Rank: 2
等级:注册会员
帖子:74
积分:840
注册:2007-6-28

o ,对了,是这样的哎,嗯,一般的需要声明时分配内存,这个就不用了。
嗯,懂了~QQQ

好人哪,一群好人哪!!!!!!
2007-7-6 16:27
关于我们 | 广告合作 | 编程中国 | 清除Cookies | Archiver | WAP | TOP

编程中国 版权所有,并保留所有权利。鲁ICP备08000592号
Powered by Discuz, Processed in 0.066214 second(s), 9 queries.
Copyright©2004-2008, BCCN.NET, All Rights Reserved