gcc、g++编译的那些事

严重声明:本帖绝非技术贴,只是在g++编译时遇到些百思不得其解的错误,而且这种错误应该很少人犯,写下来仅供你实在找不错出错地方时的“柳暗花明又一村”。

我在编译时总是提示“cprocessmodule.cpp中68行一个变量 'o_TypeName' 未声明”(注:cprocessmodule.cpp在src目录下,cprocessmodule.h在include目录下)我在cprocessmodule.h里查看了无数遍确定声明了此变量。这是个私有变量,难道...?不对啊,成员函数可以访问私有变量啊!那。。。我又想是否是上传到服务器时代码没有上传成功(未覆盖原版本代码),这个是很有可能的。

$ grep o_TypeName include/cprocessmodule.h
        string o_TypeName;
$

发现头文件也声明此变量了。然后我查了所有可能出错的地方(大小写、分号、大括号。。。)均没有问题,估计这个时候就该崩溃了。搞了我一上午啊。结果无意中我

$ vi src/cprocessmodule.h

大家发现什么问题了吗?src ,*.h ,奇怪的是竟然我还打开了文件,搜索 发现确实没有o_TypeName这个变量。正当我困惑时发现,我把目录名打成“src”,竟然还能打开文件。说明src目录下也有这个文件,查询了下发现一堆.cpp文件里藏了这个.h文件,最可恨的是这个还是老版本的.h文件,是没有声明此变量的。

这就好理解了。大家知道包含头文件时分两种形式,双尖头号<>,双引号。前者是在系统库里搜索头文件,后者一般是自己写的头文件。这样区分开的原因就是让编译器快速找到相应的头文件。编译器找头文件所在目录的先后顺序是:系统库目录-->源文件目录-->其他目录。我的源文件目录src里有一个头文件,include目录里有一个,调用时肯定是先调用本目录下的,因此就出现了这种状况。这都是本人不小心造成的恶果,写出来与大家分享,引以为戒。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值