2012-02-12 5 views
2
#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; 
    } 

выше в моем файле реализацииC++ Простой соиЬ ostream

Это в моем главном файле

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

Почему косяк эта работа? Im получаю эту ошибку

ошибка C2248: 'STD :: basic_ios < _Elem, _Traits> :: basic_ios': не может получить доступ к закрытому члену, объявленный в классе 'STD :: basic_ios < _Elem, _Traits>'

млн Благодаря! ОШИБКА ФИКСИРОВАНА !!

+0

Не уверен, почему это не работает (не глядя в деталях), но вы можете рассмотреть вопрос о реализации ввода/вывода на классе таким же образом, 99,9999% Кодеры C++. Под этим я имею в виду оператор '' << ', а не половину кодирования в C++ и половину в C :-) – paxdiablo

ответ

2

Вы не можете сделать копию std::cout, std::cin, std::cerr, или любой другой объект, полученной из std::ios_base, так как копия-конструктор для этого объекта является частным ... вы должны пройти все объекты потока, полученные из ios_base по ссылке для того, чтобы запретить вызов экземпляра-копии. Таким образом, ваша функция подписи:

void MyString::print(ostream a); 

потребности, по крайней мере, изменения в

void MyString::print(ostream& a); 
2

Причина в том, что вызов print пытается скопировать выходной поток, который не допускается. Вы должны изменить функцию взять аргумент в качестве ссылки:

void MyString::print(ostream &a) 
Смежные вопросы