探讨贴

最近写一个工具,基于MFC,但是遇到一个问题

<blockquote>
D:\Program Files\Microsoft Visual Studio 9.0\VC\atlmfc\include\atltime.inl(140) : error C2039: “_time64”: 不是“`global namespace'”的成员
D:\Program Files\Microsoft Visual Studio 9.0\VC\atlmfc\include\atltime.inl(140) : error C2039: “_time64”: 不是“`global namespace'”的成员
D:\Program Files\Microsoft Visual Studio 9.0\VC\atlmfc\include\atltime.inl(140) : error C3861: “_time64”: 找不到标识符
D:\Program Files\Microsoft Visual Studio 9.0\VC\atlmfc\include\atltime.inl(196) : error C3861: “_mktime64”: 找不到标识符
D:\Program Files\Microsoft Visual Studio 9.0\VC\atlmfc\include\atltime.inl(215) : error C3861: “_mktime64”: 找不到标识符
D:\Program Files\Microsoft Visual Studio 9.0\VC\atlmfc\include\atltime.inl(340) : error C3861: “_gmtime64_s”: 找不到标识符
D:\Program Files\Microsoft Visual Studio 9.0\VC\atlmfc\include\atltime.inl(360) : error C3861: “_localtime64_s”: 找不到标识符
D:\Program Files\Microsoft Visual Studio 9.0\VC\atlmfc\include\atltime.h(374) : error C3861: “_localtime64_s”: 找不到标识符
D:\Program Files\Microsoft Visual Studio 9.0\VC\atlmfc\include\atltime.h(393) : error C3861: “_gmtime64_s”: 找不到标识符
D:\Program Files\Microsoft Visual Studio 9.0\VC\atlmfc\include\atlcomtime.inl(263) : error C2039: “_time64”: 不是“`global namespace'”的成员
D:\Program Files\Microsoft Visual Studio 9.0\VC\atlmfc\include\atlcomtime.inl(263) : error C3861: “_time64”: 找不到标识符
d:\program files\microsoft visual studio 9.0\vc\atlmfc\include\afxtaskspane.h(279) : error C2146: 语法错误 : 缺少“;”(在标识符“m_nLastAnimTime”的前面)
d:\program files\microsoft visual studio 9.0\vc\atlmfc\include\afxtaskspane.h(279) : error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
d:\program files\microsoft visual studio 9.0\vc\atlmfc\include\afxtaskspane.h(279) : error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
d:\program files\microsoft visual studio 9.0\vc\atlmfc\include\afxtaskspane.h(279) : error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
d:\program files\microsoft visual studio 9.0\vc\atlmfc\include\afxribboncategory.h(239) : error C2146: 语法错误 : 缺少“;”(在标识符“m_ActiveTime”的前面)
d:\program files\microsoft visual studio 9.0\vc\atlmfc\include\afxribboncategory.h(239) : error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
d:\program files\microsoft visual studio 9.0\vc\atlmfc\include\afxribboncategory.h(239) : error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
d:\program files\microsoft visual studio 9.0\vc\atlmfc\include\afxdockingmanager.h(336) : error C2146: 语法错误 : 缺少“;”(在标识符“m_clkLastTime”的前面)
d:\program files\microsoft visual studio 9.0\vc\atlmfc\include\afxdockingmanager.h(336) : error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
d:\program files\microsoft visual studio 9.0\vc\atlmfc\include\afxdockingmanager.h(336) : error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
e:\dev_dir\tools\creatureeditor\creatureeditor\stdafx.h(73) : error C2146: 语法错误 : 缺少“;”(在标识符“Vector3”的前面)
e:\dev_dir\tools\creatureeditor\creatureeditor\stdafx.h(73) : error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
e:\dev_dir\tools\creatureeditor\creatureeditor\stdafx.h(73) : error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
</blockquote>


很奇怪,之前一直都很正常,突然就出现这些情况,而且出现在内部实现文件里,但是一直找不到具体原因在哪。

根据提示,既然提示标示符找不到。那就是有相应文件没有包含进来,通过msdn找到,这些和时间有关的标示符来自文件time.h,但是这个标准库里的,不可能没有,

后来把所有的修改翻了一遍之后,发现引进的包含目录里,



相应目录底下有time.h的同名文件,如果把这个包含路径去掉,就能正常编译过。我们知道include关于引号和尖括号的区别:

<blockquote>
双引号表示:
先在程序的源文件所在的目录查找,如果未找到则去系统默认目录查找,通常用于包括程序作者 编写的头文件;
首先在当前的源文件目录中查找,若未找到才到包含目录中去查找

尖括号表示:
知道系统默认目录或者括号内的路径查找,通常用于包含系统中自带的头文件。
在包含文件目录中去查找(包括目录是有用户在设置环境是设置的),而不再源文件目录去查找;
</blockquote>

通过查看mfc的框架代码,我们看他们的确用的是引号包含,但是对于time.h这个文件(在afx.h中有包含)是尖括号包含,那问题就来了,为啥附加的包含路径的同名文件会覆盖系统自带的同文件的定义,也即上面的编译错误该怎么解释。请高手指导。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值