2014-10-08 62 views
-3

我一直在寻找解决方案,但找不到我需要/想要的。C++简单流操作与ostream和istream?

我想要做的就是将用于std :: cout的流传递给一个处理它的函数。什么到目前为止我用的是一个模板函数:

template<typename T> 
void printUpdate(T a){ 
    std::cout << "blabla" << a << std::flush; 
} 

int main(int argc, char** argv){ 

    std::stringstream str; 
    str << " hello " << 1 + 4 << " goodbye"; 
    printUpdate<>(str.str()); 

    return 0; 
} 

我宁愿是这样的:

printUpdate << " hello " << 1 + 4 << " goodbye"; 

std::cout << printUpdate << " hello " << 1 + 4 << " goodbye"; 

我试图做的事:

void printUpdate(std::istream& a){ 
    std::cout << "blabla" << a << std::flush; 
} 

但这给了我:

error: invalid operands of types ‘void(std::istream&) {aka void(std::basic_istream<char>&)}’ and ‘const char [5]’ to binary ‘operator<<’ 
+0

你不能将数据输出到的输入流。将参数更改为'std :: ostream&a'。另外,'flush'没有为输入流定义。 – 2014-10-08 15:25:02

+0

我也试过了。同样的错误: 错误:类型'无效(std :: ostream&){aka void(std :: basic_ostream &)}'和'const char [5]'为二元操作符<<' – 2014-10-08 15:26:41

+0

的操作数无效'main'函数,您需要将流类型提供给'printUpdate'函数调用,例如'printUpdate '。 – 2014-10-08 15:29:50

回答

1

您无法将数据输出到输入流,这不是一件好事。 变化:

void printUpdate(std::istream& a){ 
    std::cout << "blabla" << a << std::flush; 
} 

要:

void printUpdate(std::ostream& a){ 
    std::cout << "blabla" << a << std::flush; 
} 

注流类型变化。

编辑1:
此外,你不能输出流中另一个流,至少std::cout
返回值<< aostream类型。
cout流不喜欢被馈送另一个流。

更改为:

void printUpdate(std::ostream& a) 
{ 
    static const std::string text = "blabla"; 
    std::cout << text << std::flush; 
    a << text << std::flush; 
} 

编辑2:
你需要一个流传递给需要一个流的功能。
您无法将字符串传递给需要流的函数。
试试这个:

void printUpdate(std::ostream& out, const std::string& text) 
    { 
    std::cout << text << std::flush; 
    out << text << std::flush; 
    } 

    int main(void) 
    { 
    std::ofstream my_file("test.txt"); 
    printUpdate(my_file, "Apples fall from trees.\n"); 
    return 0; 
    } 

链接的输出流 如果你想链的东西到输出流,就像从功能效果,功能要么返回打印(流式传输的对象)或相同输出流。

实施例:

std::ostream& Fred(std::ostream& out, const std::string text) 
    { 
    out << "--Fred-- " << text; 
    return out; 
    } 

    int main(void) 
    { 
    std::cout << "Hello " << Fred("World!\n"); 
    return 0; 
    } 
+0

我也试过。相同的错误: 错误:无效操作数的类型'无效(std :: ostream&){又名无效(std :: basic_ostream &)}'和'const char [5]'二进制'操作符<<' – 2014-10-08 15:29:45

+0

错误消息与我编辑中的示例不匹配,因为“text”是一个“std :: string”,不是由5个字符组成的数组。 – 2014-10-08 15:37:32

+0

对不起,错误信息来自函数调用: printUpdate <<“abcd”; – 2014-10-08 15:43:54