C++ Builder : #include <iostream> error

4

我正在测试一个新版本的CBuilder(版本XE2)。大部分常用的包含文件都被重定向到boost库或dinkumware库(一些STL实现?)。

#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)运行良好...
感谢您的帮助。

已经解决那个问题了吗? - kokbira
你尝试过从头开始重建所有内容吗?更新后出现未定义符号可能表示预编译头文件或未重新构建的二进制文件。 - bipll
2个回答

1

你的头文件末尾有匹配的 #endif 吗?

能提供一个最小的完整示例代码来重现这个错误吗?


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

1

我知道这是一个旧帖子,但有人可能会像我一样在互联网搜索中找到它。检查您的项目设置;我有一个项目开始生成类似的错误,并发现我已经在编译器设置选项卡中将代码兼容性设置从Borland/Codegear更改为ANSI。将其改回即可消除错误。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接