移植quickburro到cb中,编译出现问题?
另外头文件中是这样定义的
int __fastcall GetIntegerGoods(System::AnsiString GoodsName);
头文件都已经有加名字空间,理论上已经可以解决名称冲突问题,但是CB自动生成的头文件中,都自动加上这一句:using namespace XXXX ;
找到相关的头文件,注释掉这句就好了。
[解决办法]
当你集成多个第三方控件一起使用时,难免遇到同名冲突的问题,特别枚举名称与一些WIN32相关定义,这此在不同控件中往往被重复定义。而它们归属不同的名字空间,名称如果是从pas文件而来的话,在Hpp头文件中注释掉 using namespace XXXX ; 这一句是比较好的解决方式。此时默认不会使用对应pas文件中定义的名称。很多WIN32的定义,CB中往往直接使用原来的C语言头文件,而pas却要重新定义接口才能使用,这就造成CB中的第三方控件很容易出现名称冲突。
具体该如何做才是最好,这取决于你的项目中,文件是如何组织的,哪部分是重要的常用的。我的一般做法是,保留.h中的定义,屏蔽掉 hpp中的using namespace.
名字空间一旦用using引入,就不可以再屏蔽掉,因为如果一个头文件中要引入,另一个却要屏蔽,这叫编译器如何是好?不过我个人还是倾向有一个屏蔽某个名字空间的机制。
[解决办法]
在你的错误提示中,有看到是哪个头文件定义的。
这个问题不是pas头文件引起的,是microsoft的
winsock.h , ws2def.h 这两个头文件中,有重复定义部分,
解决办法在#include<windows.h>之前#include <winsock2.h>
或者在#include<windows.h>之前定义#define _WINSOCKAPI_
或者将 #include <winsock.h> 放在 #include <ws2def.h>的前面
你的方式,牵涉到多个头文件,你仔细检查一下include次序吧。