XE3 是bug还是破解后遗症?
HKCID 2013-03-02 11:00:54
刚装XE3 不久,把以前的项目无错的项目编译一下,发现XE3竟然忽略的头文件的类的内联函数.
例如:
//头文件 AAAA.h
namespace TESTINLIN{
class AAAA
{
public:
void test();
};
inline void AAAA::test (){
int tst =555;
tst +=1;
}
}
//Main.cpp文件
include "AAAA.h"
WINAPI _tWinMain(HINSTANCE, HINSTANCE, LPTSTR, int)
{
TESTINLIN::AAAA lew;
lew.test();
}
当然如果你把简单的项目编译的话没有错,但我的是 AAAA.Cpp、BBBB.cpp、 XXXX.cpp 等相互引用头文件。
如果上面的在XXXX.cpp 的某个函数用到AAAA实例的内联函数,例如:
void xxxx::app(){
TESTINLIN::AAAA lew;
lew.test();
}
编译XXXX.cpp没错,但链接的时候就会出现Error: Unresolved external 'AAAA::test()'...from XXXX.OBJ;
如果把AAAA.h头文件 inline void AAAA::test (){...} 的 inline去掉,链接就没有错误,
不然你在inline void AAAA::test(){...}的函数里加入任意的非法字符(或放一遍文章进去),但编译
AAAA.cpp 和 AAAA.h 却通过, 那说明XE3根本就不编译AAAA.h头文件 的内联函数 inline void
AAAA::test (){...}, 把它忽略掉,所以链接的时候就
出现 Error: Unresolved external 'AAAA::test()'...from 。
//=====================================================
这是为什么? 真的搞不明白,后来把XE3的项目的文件放到BCB6.0 里编译链接,没有错。
我又把BCB6.0 里无错的项目给XE3编译,还是链接出现Unresolved external 'AAAA::test()' 这样的链接问题。
总之所有的引用的内联函数都出现这个链接问题。
谁知道是什么原因,帮帮忙啊