C++生成器:#include错误
我正在测试新版本的 CBuilder(版本 XE2)。大多数common include 被重定向到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)运行良好...
感谢您的帮助。
I am testing a new version of CBuilder (version XE2). Most of commnon includes are redirected to boost library or to dinkumware libraries (some STL implementation?).
#ifndef Error_H
#define Error_H
#include <exception>
#include <iostream> //Error message, see bellow, please
but the compilation is stopped with following (and strange) messages:
[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
An interesting is a fact, that compilation had been stopped before my own source code was compiled... The compiler is browsing included files in the following order:
iostream -> istream -> ostream -> ios-> xlocnnum
iostream -> istream -> ostream -> ios-> xlocnnum -> streambuf -> xiosbase ->xlocale
and interrupts the processing of xlocnum and xlocale files with the following errors:
E2451 Undefined symbol 'CHAR_MAX'
E2451 Undefined symbol 'MB_LEN_MAX'
Where could be the problem? I removed all items from "include paths", why IDE still includes dinkumware libraries instead of common libraries?
Settings:
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.
The older version (C++ Builder 2010) works well...
Thanks for your help.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您的#ifndef 在头文件末尾是否有匹配的#endif?
产生此错误的最小使用完整示例代码是什么?
Does your #ifndef have a matching #endif at the end of the header file?
What's the smallest use complete sample code that produces this error?
我知道这是一篇旧文章,但有人可能会像我一样在互联网搜索中找到它。检查您的项目设置;我有一个项目开始生成类似的错误,并发现我已在编译器设置选项卡中将代码合规性设置从 Borland/Codegear 更改为 ANSI。将其改回来消除了错误。
I know this is an OLD post, but someone may find it on an internet search, like I did. Check your project settings; I had a project that started generating similar errors, and found out that I had changed the code compliance setting from Borland/Codegear to ANSI in the Compiler settings tab. Changing it back eliminated the errors.