2009-09-04 41 views
0

下面是一些代碼,使用我的代碼工作,但現在有一個問題:stringstream的問題

#include <iostream> 
#include <fstream> 
#include <sstream> 
#include <cstring> 

using namespace std;  
int main() 
{ 
stringstream out; 
out << 100; 
cout << out.str(); 
} 

我得到的只是空白輸出。我只是換了Xcode 3.2的雪豹。

+0

你的意思是'#包括的''代替的#include '?前者聲明'std :: string',它是'stringstream :: str()'的返回類型;後者聲明只是無關緊要(用於我們的目的)C函數,比如'strcmp()'等。 – 2009-09-04 03:23:00

+0

除了''和'''是多餘的(理論上'''丟失),我沒有看到任何您的代碼存在問題。它應該照原樣工作。你是從一個shell還是從一個IDE中運行它? – sbi 2009-09-04 07:47:39

回答

2

獲取在相同的條件雪豹64位的XCode 3.2基地SDK 10.6和開關至基礎SDK 10.5解決它根據本確切相同的問題。

顯然這是一個SDK 10.6問題。

和正確的解決方法是,以除去預處理宏:

  • _GLIBCXX_DEBUG = 1
  • _GLIBCXX_DEBUG_PEDANTIC = 1

從預處理器設置(或者如上述退到SDK 10.5 )。

Apple Discussion Link

1

它適合我。如果有問題,它應該是你的gcc的。

順便說一句,也許你必須添加fflush(標準輸出);在COUT後< <某個問題的stdout緩衝

#include <iostream> 
#include <fstream> 
#include <sstream> 
#include <cstring> 

using namespace std; 
int main() 
{ 
stringstream out; 
out << 100; 
cout << out.str(); 
fflush(stdout); 
} 
+0

這也沒有解決問題。我去了Xcode中的項目設置,並更改了OS X 10.6 - > 10.5中所有配置的基本SDK,這解決了問題。任何想法爲什麼? – banDedo 2009-09-04 03:43:46

+1

@ Fu4ny:在這種情況下'std :: flush'並不是真正需要的,因爲程序退出時流無論如何都會被刷新。 (唯一的問題可能是Patrick在關閉時出現了斷點'''並且想知道爲什麼他的輸出沒有出現,但這是不太可能的。) – sbi 2009-09-04 07:45:31

+0

我真的不知道爲什麼,但我只是添加沖洗以確保該流被刷新。 應該是gcc或stdout的問題 – ntcong 2009-09-04 08:51:58

0

另一個想法是,你必須從你升級了以某種方式搞亂的東西之前遺留下來的.o文件。來自兩個不同版本的C++編譯器的.o文件混合會導致各種奇怪的問題。我也不打折頭文件的問題,儘管sstream應該包括字符串。

0

不應該在轉換爲字符串之前添加字符串的結尾嗎?

cout << out.str() << sdt::ends;