一、编译不通过的代码:

/*******************************************************************************
* File Name : ./main.cpp
* Author : zjw
* Email : zjw_0722@163.com
* Create Time : 2015年04月09日 星期四 17时36分02秒
*******************************************************************************/ #include <iostream>
#include <fstream>
#include <string> using namespace std; void Print(ostream out, string strText)
{
out << strText << endl;
} int main(int argc, char **argv)
{
Print(cout, "cout"); ofstream fout("./test.dat");
if (!fout.is_open())
{
Print(cout, "error");
}
else
{
Print(fout, "fout");
fout.close();
} return ;
}

错误提示:

In file included from /usr/lib/gcc/x86_64-redhat-linux/4.4./../../../../include/c++/4.4./ios:,
from /usr/lib/gcc/x86_64-redhat-linux/4.4./../../../../include/c++/4.4./ostream:,
from /usr/lib/gcc/x86_64-redhat-linux/4.4./../../../../include/c++/4.4./iostream:,
from ./main.cpp::
/usr/lib/gcc/x86_64-redhat-linux/4.4./../../../../include/c++/4.4./bits/ios_base.h: In copy constructor ‘std::basic_ios<char, std::char_traits<char> >::basic_ios(const std::basic_ios<char, std::char_traits<char> >&)’:
/usr/lib/gcc/x86_64-redhat-linux/4.4./../../../../include/c++/4.4./bits/ios_base.h:: 错误:‘std::ios_base::ios_base(const std::ios_base&)’是私有的
/usr/lib/gcc/x86_64-redhat-linux/4.4./../../../../include/c++/4.4./iosfwd:: 错误:在此上下文中
/usr/lib/gcc/x86_64-redhat-linux/4.4./../../../../include/c++/4.4./iosfwd: In copy constructor ‘std::basic_ostream<char, std::char_traits<char> >::basic_ostream(const std::basic_ostream<char, std::char_traits<char> >&)’:
/usr/lib/gcc/x86_64-redhat-linux/4.4./../../../../include/c++/4.4./iosfwd:: 附注:在这里第一次需要生成的方法‘std::basic_ios<char, std::char_traits<char> >::basic_ios(const std::basic_ios<char, std::char_traits<char> >&)’
./main.cpp: In function ‘int main(int, char**)’:
./main.cpp:: 附注:在这里第一次需要生成的方法‘std::basic_ostream<char, std::char_traits<char> >::basic_ostream(const std::basic_ostream<char, std::char_traits<char> >&)’
./main.cpp:: 错误: 初始化‘void Print(std::ostream, std::string)’的实参

二、可执行代码:

/*******************************************************************************
* File Name : ./main.cpp
* Author : zjw
* Email : zjw_0722@163.com
* Create Time : 2015年04月09日 星期四 17时36分02秒
*******************************************************************************/ #include <iostream>
#include <fstream>
#include <string> using namespace std; void Print(ostream &out, string strText)
{
out << strText << endl;
} int main(int argc, char **argv)
{
Print(cout, "cout"); ofstream fout("./test.dat");
if (!fout.is_open())
{
Print(cout, "error");
}
else
{
Print(fout, "fout");
fout.close();
} return ;
}

编译&执行成功。

三、总结:

这里不明白的是为什么传递流对象不行,而传递引用可以。而且g++的编译错误信息又看不太懂。只能记住以后需要用到流对象做参数,使用传引用了。

C++之把流对象当做函数参数传递的更多相关文章

  1. C 和 C++ 的标准库分别有自己的 locale 操作方法,C 标准库的 locale 设定函数是 setlocale(),而 C++ 标准库有 locale 类和流对象的 imbue() 方法(gcc使用zh_CN.GBK,或者zh_CN.UTF-8,VC++使用Chinese_People's Republic of China.936或者65001.)

    转自:http://zyxhome.org/wp/cc-prog-lang/c-stdlib-setlocale-usage-note/ [在此向原文作者说声谢谢!若有读者看到文章转载时请写该转载地址 ...

  2. c++ 流对象之streambuf(可当做缓冲区使用)

    在C++ 中引入了流的概念,我们很方便的通过流来读写文本数据和二进制数据,那么流对象的数据究竟是怎么存储的呢,为了搞清这个问题,先来看一看c++ 的 io 体系: 由图可以看出,在stream 的实现 ...

  3. Python之函数对象、函数嵌套、名称空间与作用域、闭包函数、装饰器

    目录 一 函数对象 二 函数的嵌套 三 名称空间和作用域 四 闭合函数 五 装饰器 一.函数对象 1.函数是第一类对象 #第一类对象的特性:# 可以被引用 # 可以当做参数传递 # 返回值是函数 # ...

  4. Python语言特性之1:函数参数传递

    问题:在Python文档中好像没有明确指出一个函数参数传递的是值传递还是引用传递.如下面的代码中"原始值"是不放生变化的: class PassByReference: def _ ...

  5. 【JAVA 其它流对象】

    一.PrintStream类. 该流是字节流. public class PrintStream extends FilterOutputStream implements Appendable, C ...

  6. C++学习47 文件的概念 文件流类与文件流对象 文件的打开与关闭

    迄今为止,我们讨论的输入输出是以系统指定的标准设备(输入设备为键盘,输出设备为显示器)为对象的.在实际应用中,常以磁盘文件作为对象.即从磁盘文件读取数据,将数据输出到磁盘文件.磁盘是计算机的外部存储器 ...

  7. js创建对象的三种方法:文本标识法和构造器函数法和返回对象的函数

    文本标识法和定义变量差不多,像这样 var obj = {name:'HanMM','2':'Dali'}; 函数构造器法  先创建一个对象函数 function Obj() { this.addre ...

  8. 前端笔记之ES678&Webpack&Babel(下)AMD|CMD规范&模块&webpack&Promise对象&Generator函数

    一.AMD和CMD规范(了解) 1.1传统的前端开发多个js文件的关系 yuan.js中定义了一个函数 function mianji(r){ return 3.14 * r * r } main.j ...

  9. python之函数对象、函数嵌套、名称空间与作用域、装饰器

    一 函数对象 一 函数是第一类对象,即函数可以当作数据传递 #1 可以被引用 #2 可以当作参数传递 #3 返回值可以是函数 #3 可以当作容器类型的元素 二 利用该特性,优雅的取代多分支的if de ...

随机推荐

  1. Java 模拟新浪登录 2016

    想学习一下网络爬虫.涉及到模拟登录,查阅了一番资料以后发现大部分都有点过时了,就使用前辈们给的经验,Firefox抓包调试,採用httpclient模拟了一下新浪登录. 不正确之处多多包括.须要的能够 ...

  2. 【采集层】Kafka 与 Flume 如何选择(转)

    原文链接:[采集层]Kafka 与 Flume 如何选择 采集层 主要可以使用Flume, Kafka两种技术. Flume:Flume 是管道流方式,提供了很多的默认实现,让用户通过参数部署,及扩展 ...

  3. RecyclerView 数据刷新的几种方式 局部刷新 notify MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  4. jQuery过滤选择器:not()方法介绍

    jQuery(':not(selector)') 在jQuery的早期版本中,:not()筛选器只支持简单的选择器,说明我们传入到:not这个filter中的selector可以任意复杂,比如:not ...

  5. C++实现委托机制(一)

    1.引言: 如果你接触过C#,你就会觉得C#中的delegate(委托)十分灵巧,它的用法上和C\C++的函数指针很像,但是却又比C\C++的函数指针更加灵活.并且委托可以一对多,也就是可以注册多个函 ...

  6. Linux Centos7安装chrome浏览器

    参考:https://blog.csdn.net/u010472499/article/details/72327963 1. 配置yum源 在目录 /etc/yum.repos.d/ 下新建文件 g ...

  7. mysql5.0.x统计每秒增删改查替换数及系统每秒磁盘IO

    转载自:http://blog.chinaunix.net/uid-9370128-id-393082.html 1. mysql 5.0.x 统计每秒增,删,改,查,替换数  mysql 的show ...

  8. JS-为句柄添加监听函数

    具体谈如何实现JS为句柄添加监听函数之前先看一段代码,算是抛出这个问题. <html> <head> <title>JS为句柄添加监听函数</title> ...

  9. PHP快速入门 如何导入网站模板

    1 把前面的Guest网站复制到www目录下 2 在地址栏敲http://localhost:8080/guest/ 进入该网站,发现没有导入数据库 3 新建一个标签,在地址栏输入http://loc ...

  10. nested exception is java.lang.IllegalStateException: Cannot forward after response has been committed

    org.springframework.web.util.NestedServletException: Request processing failed; nested exception is ...