C++ 编译过程中报 error C2039: “div_t”: 不是“`global namespace'”的成员 的错误

>c:\program files (x86)\microsoft visual studio 11.0\vc\include\cstdlib(19): error C2039: “div_t”: 不是“`global namespace'”的成员
1>c:\program files (x86)\microsoft visual studio 11.0\vc\include\cstdlib(19): error C2873: “div_t”: 符号不能用在 using 声明中
1>c:\program files (x86)\microsoft visual studio 11.0\vc\include\cstdlib(19): error C2039: “ldiv_t”: 不是“`global namespace'”的成员
1>c:\program files (x86)\microsoft visual studio 11.0\vc\include\cstdlib(19): error C2873: “ldiv_t”: 符号不能用在 using 声明中
1>c:\program files (x86)\microsoft visual studio 11.0\vc\include\cstdlib(21): error C2039: “abort”: 不是“`global namespace'”的成员
1>c:\program files (x86)\microsoft visual studio 11.0\vc\include\cstdlib(21): error C2873: “abort”: 符号不能用在 using 声明中
1>c:\program files (x86)\microsoft visual studio 11.0\vc\include\cstdlib(21): error C2039: “abs”: 不是“`global namespace'”的成员
1>c:\program files (x86)\microsoft visual studio 11.0\vc\include\cstdlib(21): error C2873: “abs”: 符号不能用在 using 声明中
1>c:\program files (x86)\microsoft visual studio 11.0\vc\include\cstdlib(22): error C2039: “atof”: 不是“`global namespace'”的成员
1>c:\program files (x86)\microsoft visual studio 11.0\vc\include\cstdlib(22): error C2873: “atof”: 符号不能用在 using 声明中
1>c:\program files (x86)\microsoft visual studio 11.0\vc\include\cstdlib(22): error C2039: “atoi”: 不是“`global namespace'”的成员
1>c:\program files (x86)\microsoft visual studio 11.0\vc\include\cstdlib(22): error C2873: “atoi”: 符号不能用在 using 声明中
//...太多了
1>c:\program files (x86)\microsoft visual studio 11.0\vc\include\wchar.h(1257): error C2668: “memcpy”: 对重载函数的调用不明确
1>          c:\program files (x86)\microsoft visual studio 11.0\vc\include\wchar.h(1231): 可能是“void *memcpy(void *,const void *,size_t)”
1>          c:\program files (x86)\microsoft visual studio 11.0\vc\include\string.h(54): 或       “void *PPSpecialPacket::memcpy(void *,const void *,size_t)”
1>          尝试匹配参数列表“(wchar_t *, const wchar_t *, size_t)”时
1>c:\program files (x86)\microsoft visual studio 11.0\vc\include\wchar.h(1267): error C2668: “memmove”: 对重载函数的调用不明确
1>          c:\program files (x86)\microsoft visual studio 11.0\vc\include\wchar.h(1227): 可能是“void *memmove(void *,const void *,size_t)”
1>          c:\program files (x86)\microsoft visual studio 11.0\vc\include\string.h(135): 或       “void *PPSpecialPacket::memmove(void *,const void *,size_t)”
1>          尝试匹配参数列表“(wchar_t *, const wchar_t *, size_t)”时
1>c:\program files (x86)\microsoft visual studio 11.0\vc\include\eh.h(52): error C2872: “_EXCEPTION_POINTERS”: 不明确的符号
1>          可能是“c:\program files (x86)\microsoft visual studio 11.0\vc\include\eh.h(50) : _EXCEPTION_POINTERS”
1>          或       “c:\program files (x86)\microsoft sdks\windows\v7.1a\include\winnt.h(6359) : PPSpecialPacket::_EXCEPTION_POINTERS”
1>c:\program files (x86)\microsoft visual studio 11.0\vc\include\eh.h(58): error C2872: “_EXCEPTION_POINTERS”: 不明确的符号
1>          可能是“c:\program files (x86)\microsoft visual studio 11.0\vc\include\eh.h(50) : _EXCEPTION_POINTERS”
1>          或       “c:\program files (x86)\microsoft sdks\windows\v7.1a\include\winnt.h(6359) : PPSpecialPacket::_EXCEPTION_POINTERS”


如上,在编译的过程中报如上的错误!

引出错误的原因, 在头文件中增加了如下代码:

#ifndef SPECAILPACKETBASE_H__
#define SPECAILPACKETBASE_H__

#include "PPSPParamDefine.h"

#include <vector>
using namespace std;

//...

#endif

注释掉

//..

//#include <vector>
//using namespace std;

//..

后正常


网上搜索一堆后无所得。。。

后来发现自己初次使用自定义 namespace, 搜索 namespace 后,有一个帖子如下描述:

发现 引用头文件中  #include "PPSPParamDefine.h" 包含了自定义空间,调整顺序

#ifndef SPECAILPACKETBASE_H__
#define SPECAILPACKETBASE_H__

#include <vector>
using namespace std;

#include "PPSPParamDefine.h"

//..

#endif

再编译,报错
c:\program files (x86)\microsoft visual studio 11.0\vc\include\wchar.h(1257): error C2668: “memcpy”: 对重载函数的调用不明确
1>          c:\program files (x86)\microsoft visual studio 11.0\vc\include\wchar.h(1231): 可能是“void *memcpy(void *,const void *,size_t)”
1>          c:\program files (x86)\microsoft visual studio 11.0\vc\include\string.h(54): 或       “void *PPSpecialPacket::memcpy(void *,const void *,size_t)”
1>          尝试匹配参数列表“(wchar_t *, const wchar_t *, size_t)”时
1>c:\program files (x86)\microsoft visual studio 11.0\vc\include\wchar.h(1267): error C2668: “memmove”: 对重载函数的调用不明确
1>          c:\program files (x86)\microsoft visual studio 11.0\vc\include\wchar.h(1227): 可能是“void *memmove(void *,const void *,size_t)”
1>          c:\program files (x86)\microsoft visual studio 11.0\vc\include\string.h(135): 或       “void *PPSpecialPacket::memmove(void *,const void *,size_t)”
1>          尝试匹配参数列表“(wchar_t *, const wchar_t *, size_t)”时
1>c:\program files (x86)\microsoft visual studio 11.0\vc\include\eh.h(52): error C2872: “_EXCEPTION_POINTERS”: 不明确的符号
1>          可能是“c:\program files (x86)\microsoft visual studio 11.0\vc\include\eh.h(50) : _EXCEPTION_POINTERS”
1>          或       “c:\program files (x86)\microsoft sdks\windows\v7.1a\include\winnt.h(6359) : PPSpecialPacket::_EXCEPTION_POINTERS”
1>c:\program files (x86)\microsoft visual studio 11.0\vc\include\eh.h(58): error C2872: “_EXCEPTION_POINTERS”: 不明确的符号
1>          可能是“c:\program files (x86)\microsoft visual studio 11.0\vc\include\eh.h(50) : _EXCEPTION_POINTERS”
1>          或       “c:\program files (x86)\microsoft sdks\windows\v7.1a\include\winnt.h(6359) : PPSpecialPacket::_EXCEPTION_POINTERS”

报错大量减少;

再次搜寻 “memcpy” 函数的调用,屏蔽掉可能使用该函数的代码后,仍然报错。。应该不是本地代码调用引起的。。。继续按照问题1进行排查,发现有一部分代码书写如下:

#ifndef PPSPPARAMDEFINE_H__
#define PPSPPARAMDEFINE_H__

namespace PPSpecialPacket
{
#ifdef WIN32
#include <Windows.h>
#define EXPORTDLL extern "C" __declspec(dllexport)
#define SLEEP(x) Sleep(x)
 typedef __int64 INT64;
#else
#define EXPORTDLL extern "C"
 typedef void *HANDLE;
#define SLEEP(x) usleep(x*1000)
 typedef long long INT64;
#endif

//...

#endif

调整为
#ifndef PPSPPARAMDEFINE_H__
#define PPSPPARAMDEFINE_H__
#ifdef WIN32
#include <Windows.h>
#define EXPORTDLL extern "C" __declspec(dllexport)
#define SLEEP(x) Sleep(x)
typedef __int64 INT64;
#else
#define EXPORTDLL extern "C"
typedef void *HANDLE;
#define SLEEP(x) usleep(x*1000)
typedef long long INT64;
#endif
namespace PPSpecialPacket
{
//..
}

#endif

再次编译,解决问题;

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值