C ++简单的cout ostream

时间:2012-02-12 04:19:18

标签: c++ cout ostream

#include"MyString.h"
#include<iostream>
    MyString::MyString()//default constructor
    {
        length=0;
        data=NULL;
        cout<<"Default called by right none is called"<<endl;
        system("pause");
    }
    MyString::MyString(char *source)//cstyle string parameter
    {
        int counter=0;
        //we implement count without using getlen
        for(int i=0;(source[i])!='\0';i++)//assume their char string is terminated by null
        {
            counter++;
        }
        length=counter;
        cout<<"THE LENGTH of "<<source<<" is "<<counter<<endl;
        system("pause");
        data = new char[length];
    }
    void MyString::print(ostream a)//what to put in besides ostream
    {
        a<<data;
    }

以上是我的实施文件

这是我的主文件

 int main()
 {
    MyString s1("abcd");// constructor with cstyle style array
    s1.print(cout);
    system("pause");
    return 0;
 }

为什么不能这样做? 我得到这个错误

错误C2248:'std :: basic_ios&lt; _Elem,_Traits&gt; :: basic_ios':无法访问类'std :: basic_ios&lt; _Elem,_Traits&gt;'

中声明的私有成员 百万谢谢!错误固定!!

2 个答案:

答案 0 :(得分:2)

您无法复制std::coutstd::cinstd::cerr或从std::ios_base派生的任何其他对象,因为该对象的复制构造函数是私有的。 。必须通过引用传递从ios_base派生的所有流对象,以防止调用复制构造函数。因此你的功能签名:

void MyString::print(ostream a);

需要至少改为

void MyString::print(ostream& a);

答案 1 :(得分:2)

原因是对print的调用尝试复制输出流,这是不允许的。您已更改函数以将参数作为参考:

void MyString::print(ostream &a)