【问题标题】:C++ Builder : #include <iostream> errorC++ 生成器:#include <iostream> 错误
【发布时间】:2011-12-25 22:47:03
【问题描述】:

我正在测试新版本的 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)运行良好...

感谢您的帮助。

【问题讨论】:

  • 已经遇到这个问题,还是解决了?
  • 您是否尝试过从头开始重建所有内容?更新后未定义的符号可能表示预编译的头文件或未重建的二进制文件。

标签: c++ include compiler-errors c++builder


【解决方案1】:

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

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

【讨论】:

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

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

【讨论】:

    猜你喜欢
    • 2016-12-17
    • 2017-04-28
    • 2018-10-12
    • 2010-09-20
    • 1970-01-01
    • 1970-01-01
    • 2022-07-22
    • 2016-08-15
    • 1970-01-01
    相关资源
    最近更新 更多