Всем привет! При создании вложенного класса компилятор ругаетсяЖ class has no constructors (для friend все гуд)
| Код | //------------------------------------------------------- #include <iostream> //------------------------------------------------------- class String { private: class Srep; // представление Srep* pRep; class Cref {}; // ссылка на char
public: class Range {}; // для исключений
// конструкторы String(); // x = "" String(const char* p ); String( const String & x ); ~String();
// операторы String & operator = ( const char* p ); // для строковых литералов String & operator = ( const String & x ); }; //------------------------------------------------------- String::String() { pRep = new Srep( 0, "" ); } //------------------------------------------------------- String::String(const char* p ) { pRep = new Srep( strlen( p ), p ); } //------------------------------------------------------- // конструктор копии String::String(const String & x ) { x.pRep->n++; pRep = x.pRep; } //------------------------------------------------------- String::~String() { if( --pRep->n == 0 ) delete pRep; } //------------------------------------------------------- // копирующее присваивание String & String::operator = ( const String & x ) { x.pRep->n++; if( --pRep->n == 0 ) delete pRep; pRep = x.pRep; return *this; } //------------------------------------------------------- String & String::operator = ( const char* s ) { if( pRep->n == 1 ) { pRep->assign( strlen( s ), s ); } else { pRep->n--; pRep = new Srep( strlen( s ), s ); } return *this; } //------------------------------------------------------- class String::Srep { public: char* s; // указатель на эл-ты int sz; // кол-во символов int n; // кол-во обращений
// конструктор Srep( int nsz, const char* p ) { n = 1; sz = nsz; s = new char[sz + 1]; strcpy( s, p ); }
// деструктор ~Srep() { delete [] s; }
// сделать копию, если необходимо Srep* get_own_copy() { if( n == 1 ) return this; n--; return new Srep( sz, s ); }
void assign( int nsz, const char* p ) { if( nsz != sz ) { delete [] s; sz = nsz; s = new char[ nsz + 1 ]; } strcpy( s, p ); }
private: // защита от копирования Srep( const Srep & ) {} Srep& operator = ( const Srep & ) {} }; //------------------------------------------------------- int main() { return 0; } //-------------------------------------------------------
|
Не понимаю, в чем проблема. |