首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

STL源码剖析里的,不明白编译为什么错,该怎么处理

2012-03-24 
STL源码剖析里的,不明白编译为什么错C/C++ code#if 0#include new#define _THROW_BAD_ALLOC thow bad_al

STL源码剖析里的,不明白编译为什么错

C/C++ code
#if 0#include <new>#define _THROW_BAD_ALLOC thow bad_aloc#elif !defined(_THROW_BAD_ALLOC)#include <iostream>#define _THROW_BAD_ALLOC cerr<<"out of memory"<<endl;exit(0);#endiftemplate <int inst>class _malloc_alloc_template{private:    static void* (*malloc_alloc_oom_handler)();};template<int inst>void (* __malloc_allloc_template<inst>::__malloc_alloc_oom_handler)() = 0;typedef __malloc_alloc_tempate<0> malloc_alloc;


malloc.cpp
e:\test_malloc_clloc_template\test_malloc_clloc_template\malloc.cpp(6) : warning C4005: “_THROW_BAD_ALLOC”: 宏重定义
  d:\microsoft visual studio 8\vc\include\yvals.h(780) : 参见“_THROW_BAD_ALLOC”的前一个定义

============ 不明白,之前都有!defined() 判断过。竟然还会重定义


下面的错也不知道为什么?




e:\test_malloc_clloc_template\test_malloc_clloc_template\malloc.cpp(50) : error C2143: 语法错误 : 缺少“)”(在“<”的前面)
e:\test_malloc_clloc_template\test_malloc_clloc_template\malloc.cpp(50) : error C2143: 语法错误 : 缺少“;”(在“<”的前面)
e:\test_malloc_clloc_template\test_malloc_clloc_template\malloc.cpp(50) : error C2988: 不可识别的模板声明/定义
e:\test_malloc_clloc_template\test_malloc_clloc_template\malloc.cpp(50) : error C2059: 语法错误 : “<”
e:\test_malloc_clloc_template\test_malloc_clloc_template\malloc.cpp(50) : error C2039: “__malloc_alloc_oom_handler”: 不是“`global namespace'”的成员
e:\test_malloc_clloc_template\test_malloc_clloc_template\malloc.cpp(50) : error C2059: 语法错误 : “)”

[解决办法]
VS2005,在yvals.h中定义了_THROW_BAD_ALLOC,该文件被iostream所引用,所以避过了判断。
以下代码可获得楼主希望的效果(顺便修改了一些笔误,呵呵)。
C/C++ code
#if 0#include <new>#define _THROW_BAD_ALLOC thow bad_aloc#elif !defined(_THROW_BAD_ALLOC)#include <iostream>#if !defined(_THROW_BAD_ALLOC) #define _THROW_BAD_ALLOC cerr<<"out of memory"<<endl;exit(0);#endif    #endiftemplate <int inst>class __malloc_alloc_template{private:    static void* (*malloc_alloc_oom_handler)();};template<int inst>void* (* __malloc_alloc_template<inst>::malloc_alloc_oom_handler)() = 0;typedef __malloc_alloc_template<0> malloc_alloc;
[解决办法]
你用/P这个编译选项展开看看
iostream包含了不少文件,你挨个找

热点排行