2011-12-25 443 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。改變它消除了錯誤。