2011-12-25 456 views
4

我测试的CBuilder(版本XE2)的新版本。大多数commnon包括被重定向到Boost库或Dinkumware的库(STL一些实施?)。C++ Builder中的:#include <iostream>错误

#ifndef Error_H 
#define Error_H 

#include <exception> 
#include <iostream> //Error message, see bellow, please 

但编译停止与以下(怪)消息:

[BCC32 Error] xlocale(1392): E2451 Undefined symbol 'MB_LEN_MAX'[BCC32 Error] xlocale(1763):  
[BCC32 Error] xlocnum(1495): E2451 Undefined symbol 'CHAR_MAX' 
Full parser context 
xlocnum(1487): decision to instantiate: ostreambuf_iterator<char,char_traits<char> > numput::_Iput(ostreambuf_iterator<char,char_traits<char> >,ios_base &,char,char *,unsigned int) const 
--- Resetting parser context for instantiation... 
detectproj.cpp(22): #include c:\program files\embarcadero\rad studio\9.0\include\dinkumware\iostream 
iostream(5): #include c:\program files\embarcadero\rad studio\9.0\include\dinkumware\istream 
istream(5): #include c:\program files\embarcadero\rad studio\9.0\include\dinkumware\ostream 
ostream(5): #include c:\program files\embarcadero\rad studio\9.0\include\dinkumware\ios 
ios(5): #include c:\program files\embarcadero\rad studio\9.0\include\dinkumware\xlocnum 
xlocnum(30): namespace std 
xlocnum(1036): class num_put<_Elem,_OutIt> 
xlocnum(1487): parsing: ostreambuf_iterator<char,char_traits<char> > numput::_Iput(ostreambuf_iterator<char,char_traits<char> >,ios_base 

一个有趣的事实,即编制了我自己的源代码之前,停止编译...编译器正在浏览包含的文件中的顺序如下:

iostream -> istream -> ostream -> ios-> xlocnnum 
iostream -> istream -> ostream -> ios-> xlocnnum -> streambuf -> xiosbase ->xlocale 

并中断xlocnum和xlocale文件的处理与以下错误:

E2451 Undefined symbol 'CHAR_MAX' 
E2451 Undefined symbol 'MB_LEN_MAX' 

哪里可能是问题?我从“包含路径”中删除了所有项目,为什么IDE仍然包含dinkumware库而不是通用库?

设置:

Link with dynamic RTL: Off 
CodeGuard: On 
Directories and Conditionals/All configurations/Include Path: Empty 
Directories and Conditionals/All configurations/Library Path: Empty 
No pragma hdrstop, #pragma argsused are used in my code. 

旧版本(C++ Builder的2010),效果很好......

感谢您的帮助。

+0

已经有这样的问题,或解决了吗? – kokbira 2012-09-11 19:46:22

+0

你试过从头开始重建所有东西吗?更新后的未定义符号可能表示预编译头文件或未重建的二进制文件。 – bipll 2017-12-22 08:46:01

回答

0

您的#ifndef在头文件的末尾是否有匹配的#endif?

产生此错误的最小使用完整示例代码是什么?

+0

我不依赖于任何自己的源代码。只要编译器按照以下方向浏览包含的头文件:iostream-> istream-> ostream-> ios-> xlocnum。当'MB_LEN_MAX'和CHAR_MAX常量被识别为未定义时,编译将停止。 – justik 2011-12-26 11:00:48

0

我知道这是一个古老的职位,但有人可能会发现它在互联网搜索,像我一样。检查你的项目设置;我有一个项目开始产生类似的错误,并发现我在编译器设置选项卡中将代码兼容性设置从Borland/Codegear更改为ANSI。改变它消除了错误。