Project1

标题: C++的面向对象真是囧啊 [打印本页]

作者: tamashii    时间: 2011-1-24 17:15
标题: C++的面向对象真是囧啊
真是囧啊
根据面向对象的规则来讲,我要建立三个类就需要三个.h和三个.cpp
那么好了
a.h 里面内容是
#include b.h
b.h里面内容是
#include c.h
c.h里面内容是
#include a.h

那么好了,不论怎么写都会导致编译出错 - -
作者: 匿名    时间: 2011-1-24 17:46
本帖最后由 匿名 于 2011-1-24 17:47 编辑

当你知道为什么要这样做的时候,你就自然也会不由自主地这样去做。
然而,一般不会有人在课堂上告诉你为神马要那样去做。

当然石器更囧囧有神的数据结构导致了现在有时一个实例都放一个文件来玩。
作者: 蕾米莉亚·斯卡雷特    时间: 2011-1-24 17:55
本帖最后由 蕾米莉亚·斯卡雷特 于 2011-1-24 17:55 编辑

#ifndef 标识符
#define 标识符
  ....
#endif

这样就不会有问题了.

或者使用  #pragma once
作者: 雷欧纳德    时间: 2011-1-24 19:01
没事别在.h里包.h,除非万不得已
作者: tamashii    时间: 2011-1-24 19:12
蕾米莉亚·斯卡雷特 发表于 2011-1-24 17:55
#ifndef 标识符
#define 标识符
  ....

- -用了,两个都用了
我不会犯这种低级错误,但是他就是报错
作者: chaochao    时间: 2011-1-24 19:15
编译器的问题。


chaochao于2011-1-24 19:16补充以下内容:
换个编译器试试看。
作者: 江湖大虾仁    时间: 2011-1-25 01:33
回复 tamashii 的帖子

Q:如果我要从a类调用b类里的东西,b类调用c类里的东西,c类调用a类里的东西怎么办

A:先声明其中类的存在
e.g.
class A;
class C{
//use sth in class A
}
class B{
//use sth in class C
}
class A{
//use sth in class B
}


江湖大虾仁于2011-1-25 01:34补充以下内容:
另外你编译报的什么错也要说下啊。。。
作者: 苏小脉    时间: 2011-1-25 02:08
根据面向对象的规则来讲

这不是“面向对象的规则”,这是 C++ 标准以及 parser 的限制问题。大部分 C++ parser 默认都不会检查循环依赖性,直接从 #include 包含的位置展开代码,所以需要写代码的人自己去做。
作者: 雷欧纳德    时间: 2011-1-26 18:40
在cpp中包含.h
在.h里声明一下就行了
作者: tamashii    时间: 2011-1-26 19:15
chaochao 发表于 2011-1-24 19:15
编译器的问题。

难道让我用gpp编译器么
话说其他的编译器能支持vc库么
作者: IamI    时间: 2011-1-26 19:22
其实我早就投向C#的怀抱了……C++一直弄不懂头文件和cpp文件有啥区别= =b
头文件套头文件这种傻事最好还是少干……要么就上宏
作者: tamashii    时间: 2011-1-26 20:41
IamI 发表于 2011-1-26 19:22
其实我早就投向C#的怀抱了……C++一直弄不懂头文件和cpp文件有啥区别= =b
头文件套头文件这种傻事最好还是 ...

要不是C#做游戏效果不好我早就用了 - -
其实也可以,用XNA,但是貌似XNA做出来的游戏需要很大的类库……
作者: IamI    时间: 2011-1-26 20:45
回复 tamashii 的帖子

直接开DX无压力= =v
作者: 苏小脉    时间: 2011-1-27 01:59
回复 IamI 的帖子

制定这个标准的其中一个原因是简化了分析器,分析时只需要遍历一次代码就能构建完整的符号表,减少了编辑 - 编译 - 运行 - 调试周期,不过这主要是针对遗留系统或者大型工程而言,在其它场合下只不过是个极简主义的毒瘤罢了。

另一个最明显的好处是在源代码层,不依赖 IDE 就把接口和实现分开了 ~_~




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1