游戏开发论坛

 找回密码
 立即注册
搜索
12
返回列表 发新帖
楼主: flyaflya

奇怪的类声明问题.

[复制链接]

0

主题

2

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2003-11-17 11:36:00 | 显示全部楼层

Re:奇怪的类声明问题.

这个问题其实一点都不奇怪。
类B只知道类A的声明,不知道定义。也就是说编译器不知道类B里要为成员A安排多少空间,当然要跟你急。指针就不同了,不管什么指针都是4个字节,编译器是知道的。当然如果你还要在B的定义里使用A的成员的话,也会出错的。
至于你在main里或是全局里没问题,估计是因为在那个编译单元里,编译器是知道类A的定义的,你看看是不是这样。

6

主题

100

帖子

105

积分

注册会员

Rank: 2

积分
105
发表于 2003-11-17 11:50:00 | 显示全部楼层

Re: 奇怪的类声明问题.

你这样做会有问题。会重复包含。重复包含就会出现你的情况 
我列个例子 :
#include "scene.h"
class CGameWnd
{        ...
        CScene                m_Scene;
              .....
}
#include "console.h"
class CScene  
{
     CConsole                        m_Console;
......
}

#include "gamewnd.h"
class CConsole  
{......
} 这样就会出现你的问题
你看到了吗?CConsole  类是不能#include "gamewnd.h"的。。否则就重复包含了
[em20]

2

主题

20

帖子

20

积分

注册会员

Rank: 2

积分
20
发表于 2003-11-17 12:12:00 | 显示全部楼层

Re: 奇怪的类声明问题.

你应该使用预编译,保证只在一个头里声明一次。
这样应该没有问题。 [em18]

59

主题

1104

帖子

1199

积分

金牌会员

Rank: 6Rank: 6

积分
1199
发表于 2003-11-17 13:18:00 | 显示全部楼层

Re:奇怪的类声明问题.

......我想我知道问题了。。
在头文件里面不能只声明:
class a;
这样子的,应该包含你要定义的类的结构。也就是说,在头文件里面应该这样:
class a
{
  ....
  ....
};
即使你在其他地方有class a的结构,也只能在连接的时候才能生效,而你在声明a m_a的时候,由于编译器从头文件里面不知道你class的大小,所以无法编译通过。

2

主题

20

帖子

20

积分

注册会员

Rank: 2

积分
20
发表于 2003-11-17 13:33:00 | 显示全部楼层

Re:奇怪的类声明问题.

是的。是这样。

21

主题

86

帖子

98

积分

注册会员

Rank: 2

积分
98
 楼主| 发表于 2003-11-17 13:53:00 | 显示全部楼层

谢谢大家的帮助,问题已经解决了。

其实还是预编译的问题。因为我把"StdAfx.h"改成了"head.h",因而它没有进行预编译。所以:
1.我先建了一个文件"StdAfx.h",
//"StdAfx.h"
#pragma once
#include "head.h"

2.建"StdAfx.cpp"
//StdAfx.cpp
#inlcude "StdAfx.h"

3.选择工程----->settings,左边选住工程,右边在C/C++中Category选中precompliyed heads.在下面选择 use precompliyed head填入"stdAFx.h".

4..选择工程----->settings,左边选住文件"stdAfx.cpp",右面在C/C++中Category选中precompliyed heads,在下面选择Create precompliyed heads,填上"stdAfx.h".

5.所有的cpp文件最开头都用#include "stdAfx.h"

就可以了.根据http://cppworld.myrice.com/document/20030727-12.htm

21

主题

86

帖子

98

积分

注册会员

Rank: 2

积分
98
 楼主| 发表于 2003-11-17 13:57:00 | 显示全部楼层

Re:奇怪的类声明问题.

其实这种结构不错.
在head.h中包含所有的头文件,再声明所有的类,比较清晰,不会出现重复引用的问题.

59

主题

1104

帖子

1199

积分

金牌会员

Rank: 6Rank: 6

积分
1199
发表于 2003-11-17 19:48:00 | 显示全部楼层

Re:奇怪的类声明问题.

你在头文件里面写:
#ifndef ___XXX__H____
#define ___XXX__H____

...//头文件内容

#endif
这样就不怕重复include了

36

主题

1047

帖子

1147

积分

金牌会员

Rank: 6Rank: 6

积分
1147
发表于 2003-11-17 20:29:00 | 显示全部楼层

Re:奇怪的类声明问题.

gddsky 说得也有道理,tarkey 说的办法是防止重复 include ,我原来也曾这样做过,但是当头文件比较多时每次都重新编译一遍,很浪费时间的,后来就直接引用了。

0

主题

3

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2003-11-25 18:59:00 | 显示全部楼层

Re:奇怪的类声明问题.

你的类中没有生命构造函数,因为你定义一个对象的时候,就要调用到该函数,但如果你定义一个指针的时候,则不用调用该函数,因为指针还没有分配空间,所以你说的a *m_pa没有错误,但是a m_a就出现错误。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-4-21 15:43

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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