首页 » 技术分享 » c216问题

c216问题

 

原帖地址:http://blog.sina.com.cn/s/blog_4a08244901016r4q.html

在一段程序中,我将两个类在各自的h文件中互相include,结果老是显示error C2146: 语法错误 : 缺少“;”??

整了半天也没有搞定。最后经过查看相关帖子,发现还是自己的编程习惯导致的错误。最后将include A.h改写在了B.cpp文件中可以了!(之前在B.h中老是报错)

头文件包含其实是一想很烦琐的工作,不但我们看着累,编译器编译的时候也很累,再加上头文件中常常出现的宏定义。感觉各种宏定义的展开是非常耗时间的,远不如自定义函数来得速度。我仅就不同头文件、源文件间的句则结构问题提出两点原则,仅供参考:

第一个原则应该是,如果可以不包含头文件,那就不要包含了。这时候前置声明可以解决问题。如果使用的仅仅是一个类的指针,没有使用这个类的具体对象(非指针),也没有访问到类的具体成员,那么前置声明就可以了。因为指针这一数据类型的大小是特定的,编译器可以获知。

第二个原则应该是,尽量在CPP文件中包含头文件,而非在头文件中。假设类A的一个成员是是一个指向类B的指针,在类A的头文件中使用了类B的前置声明并便宜成功,那么在A的实现中我们需要访问B的具体成员,因此需要包含头文件,那么我们应该在类A的实现部分(CPP文件)包含类B的头文件而非声明部分(H文件)。

同时,头文件中包含的文件的顺序也可能会导致程序出错,见:http://www.cnblogs.com/tianyige/archive/2008/12/31/1365725.html

转载自原文链接, 如需删除请联系管理员。

原文链接:c216问题,转载请注明来源!

0