STL源码剖析里的,不明白编译为什么错,该怎么处理
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包含了不少文件,你挨个找