经常碰到这样的问题:
当a.h包含了b.h时
b.h再包含a.h就莫名的出错,尽管已经使用了
#ifndef XXXXXXXXXXXXXXXX
#define XXXXXXXXXXXXXXXX
#denif
等类似防止重复编译宏,也无济于事。
后来听说可以用预声明来处理这个问题
在b.h中直接class a;
OK,编译没问题了,可一运行就出现“段错误”
清理工程,全新编译一编,这下运行顺利。
至今还不知道原因,先记录下来,省得神秘的“段错误”,什么时候再跳出来吓人。
另外一个就是linux下(eclipse-cdt) 将C代码和C++混用到一块的时候,神秘的编译错误又来了。
这次没有循环include。
将C代码分成a.h,和a.c两个文件。假设里面有个function()函数
链接时死活告诉你没定义(undefine) function()。气得直叫编译器是不是傻了,分明在a.c中实现了啊。
而且a.c中还include了a.h。搞不定,我还躲不起吗。直接把a.c中的全给移到a.h中,这下似乎老实多了。
可在C++风格的b.h,c.h同时包含了a.h(或者是C++的模板头文件)时,问题又来了,这次是多重定义(multi define)
可是我已经全在.h文件中加“#ifndef 。。。。#define。。。。。#endif”语句了。
以前看到C++中嵌入C代码要加“extern c”,试了一下,问题依然。
可能自己没加好。
加个namespace ASpace还是不行。也不知是怎么捣的,后来用无名名字空间,a.h写成
#ifndef _A_H_
#define _A_H_
namespace
{
void function()
{
}
}
#denif
错误居然消失了。总结经验就是在C++中还是少用C风格,多用类。省得到时麻烦多多。
错误感觉上很诡异,不过还是自己功底不够深厚啊。了解这方面较少。


gongji110 于 2008-04-22 09:40:56发表:
你的经验很值得我借鉴!回去重现一下你的错误,以后编程要注意了!