2009-10-19 21 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