3
#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; } 

the above is in my implementation file

This is in my main file

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

Why cant this work? Im getting this error

error C2248: 'std::basic_ios<_Elem,_Traits>::basic_ios' : cannot access private member declared in class 'std::basic_ios<_Elem,_Traits>'

Million Thanks! ERROR FIXED!!

1
  • Not sure why that's not working (without looking in detail) but you may want to consider implementing I/O on your class the same way 99.9999% of C++ coders do. By that, I mean with operator<< rather than half coding in C++ and half in C :-) Commented Feb 12, 2012 at 4:23

2 Answers 2

3

You cannot make a copy of std::cout, std::cin, std::cerr, or any other object derived from std::ios_base since the copy-constructor for that object is private ... you must pass all stream objects derived from ios_base by reference in order to prevent invocation of the copy-constructor. Thus your function signature:

void MyString::print(ostream a); 

needs to at least change to

void MyString::print(ostream& a); 
Sign up to request clarification or add additional context in comments.

Comments

2

The reason is that the call to print tries to copy the output stream, which is not allowed. You have change the function to take the argument as a reference:

void MyString::print(ostream &a) 

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.