2009-10-19 47 views
1

我想通過stringstream得到一個雙字符串,但它不工作。sstream不工作...(STILL)

std::string MatlabPlotter::getTimeVector(unsigned int xvector_size, double ts){ 
    std::string tv; 
    ostringstream ss; 
    ss << "0:" << ts << ":" << xvector_size; 
    std::cout << ss.str() << std::endl; 
    return ss.str(); 
} 

它只輸出「0:」我的控制檯...

對我工作的兩個項目,這兩個同樣的問題。我發佈了一個不同的,它遇到了同樣的問題。它貼在這裏:
http://pastebin.com/m2dd76a63
我有三個類PolyClass.h和.cpp,和主要。問題的功能是PrintPoly。有人可以幫我嗎?感謝一堆!

+0

請你會重新使用 「代碼」 代碼按鈕?這會讓閱讀變得更容易,並使你更有可能得到一些幫助。 – razlebe 2009-10-19 21:03:31

+0

該檔案?什麼文件? – GManNickG 2009-10-19 21:03:50

+0

你沒有解釋你的問題 - 你提到一個文件,但你的代碼示例不包含任何文件。 – coppro 2009-10-19 21:06:06

回答

4

您正在正確打印,但是您的打印順序邏輯不正確。 我修改它的方式,我認爲你想要它,讓我知道這是否有幫助。 http://pastebin.com/d3e6e8263

老答案:

你的代碼的工作,雖然ostringstreamstd命名空間。問題出在您的文件打印代碼中。

我可以看到您對該功能的呼叫嗎?

我做了一個試驗案例:

// #include necessary headers 
int main(void) 
{ 
    std::string s; 
    s = MatlabPlotter::getTimeVector(1,1.0); 
} 

我得到的輸出是0:1:1

1

我可以用這個「無輸出」的一部分真正的幫助不是,因爲你並沒有顯示你的試圖輸出這個的代碼。作爲一個猜測,你是否可能沒有在某處放置EOL?一些系統在輸入換行符之前不會輸出任何文本輸出。您可以通過將<< std::endl添加到您的線上,或將'\n'添加到您的字符串中。

既然您沒有放下使用它,您需要使用類型std::ostringstream。這與您如何使用「std:string」而不是「string」類似。

另外,難道是我,我擺脫了臨時變量,只是return ss.str();這是更少的代碼(可能會出錯),並可能更少的工作的程序。

+0

正確 - 但不是問題的根本原因。 – razlebe 2009-10-19 21:12:30

+0

我明白了。我跳過了這個連接,因爲你實際上沒有發佈任何輸出的代碼。問題編輯得當。 – 2009-10-19 21:17:30

+0

只是指出這不是根本原因,爲了防止那個問這個問題的人變得更加困惑......沒有任何意圖。 – razlebe 2009-10-19 21:21:27

2

下面的代碼是100%正確的:

#include <iostream> 
#include <sstream> 
#include <string> 

// removed MatlabPlotter namespace, should have no effect 
std::string getTimeVector(unsigned int xvector_size, double ts) 
{ 
    // std::string tv; // not needed 
    std::ostringstream ss; 
    ss << "0:" << ts << ":" << xvector_size; 

    std::cout << ss.str() << std::endl; 

    return ss.str(); 
} 

int main(void) 
{ 
    // all work 
    // 1: 
    getTimeVector(0, 3.1415); 

    // 2: (note, prints twice, once in the function, once outside) 
    std::cout << getTimeVector(0, 3.1415) << std::endl; 

    // 3: (note, prints twice, once in the function, once outside) 
    std::string r = getTimeVector(0, 3.1415); 
    std::cout << r << std::endl; 
} 

查找我們的分歧,這可能是因爲您的錯誤的來源。因爲它停在你的雙倍,我猜你想要打印的雙倍是無窮大,NaN(不是數字),或一些其他的錯誤狀態。

0

好吧,我想你掛代碼,它崩潰,雖然PrintPoly後碰撞發生之前輸出

B 4 
A 5 
B 4 
C 3 
x^ + 5x^ + 3 

我。從看代碼這是我期望它打印。你是說你在信件後沒有出現整數?

0

非常感謝您的輸入!不確定確切的錯誤,但它必須是XCode中的一些設置,它正在搞亂它。我做了一個CMakeLists。txt文件並從終端使用
cmake -G XCode .. 編譯並生成了一個XCode項目。我跑了它,現在它工作正常......現在有誰會碰巧知道什麼可能會導致XCode做到這一點?我運行3.2版具有以下:
64位
組件版本
的Xcode IDE:1610.0
的Xcode核心:1608.0
ToolSupport:1591.0