Я компилирую и запускаю в Ubuntu.Я работаю над классом, который имеет: string * p1 и является двухэлементным динамическим массивом объектов типа string.У меня работают классы, и проблема в том, что когда я запускаю программу, у меня появляется результат: «Ошибка сегментации (ядро сброшено)».Один из способов, как я пытался это исправить, это изменение p1, я переименовал его: string p1 [2];Все, что я могу сказать, - факт, что это начало работать, но я просто серьезно выяснил, что вызвало проблему.[Я удалил фрагменты кода оператора, чтобы сделать его более понятным.]
class K2;
class K1{
private:
string *p1; // the problem is here, if I change it to p1[2]; it works!
public:
K1() {p1[0]=p1[1];}
K1(string a, string b) {p1[0]=a, p1[1]=b;}
K1(const string (&p)[2]) {p1[0]=p[0], p1[1]=p[1];}
string& operator[] (size_t i) ;
const string& operator[] (size_t i) const ;
friend class K2;
};
ostream& operator<<(ostream& _out, const K1& _p1)
{ _out<<_p1[0]<<" "<<_p1[1]; return _out; }
class K2{
private:
K1 p1;
double p2;
public:
K2(): p1("brak", "brak"), p2(0.0){}
K2(string _p11, string _p12, double _p2): p1(_p11, _p12), p2(_p2){}
K2(const K2& kopia): p1(kopia.p1), p2(kopia.p2){ p1=kopia.p1; p2=kopia.p2; }
K2& operator= (const K2& kopia)
{if(this!=&kopia)
{ p1=kopia.p1; p2=kopia.p2; }
return *this;
}
friend ostream& operator<<(ostream& _out, const K2& _p2);
~K2() {}
};
ostream& operator<<(ostream& _out, const K2& _p2)
{ _out<<_p2.p1<<" "<<_p2.p2; return _out; }
int main(int argc, char* argv[])
try
{
K2 ob1, ob2;
if(argc!=1) throw 1;
const K2* wsk1 = new K2("kawa", " z mlekiem", 4.50);
const K2 ob3(*wsk1);
delete wsk1;
wsk1=0;
const K2 * wsk2 = new K2(ob3);
ob2 = *wsk2;
cout << ob1 <<"\n"<<*wsk2<<"\n";
delete wsk2;
wsk2 = 0;
cout<< ob2<<"\n";
}
У вас есть идеи, почему это происходит?И как это исправить в коде?Мне нужно посмотреть, как это делается, если что-то трудно понять, просто скажите мне, и я отвечу, что я имел в виду.