Итак, я пишу класс, который содержит ссылки на два объекта, например:
private:
Poly *p1, *p2;
Затем я создаю класс следующим образом:
rati::rati() : p1(new Poly()), p2(new Poly()) {
(*p2)[0] = 1;
}
rati::rat(Poly &p1, Poly &p2) : p1(&p1), p2(&p2) {
}
, и я перегружаю <<
оператор для печати, например, такой (как функция друга, конечно):
using std::ostream;
ostream &operator<<(ostream &stream, rat &r) {
return stream << *(r.p1) << "--------------------------" << std::endl << *(r.p2);
}
Poly
перегрузка класса <<
(и успешно, на этот раз).
Когда я использую конструктор по умолчанию, он работает отлично. Однако, если я использую второй конструктор, он выдает SIGSEGV
. Я отладил его, и кажется, что когда я дохожу до последней строки:
rat r = r1*r1+r2;
cout << r << endl;
Достигает без проблем, вот свойства:
r.p1->d = 10
r.p2->d = 7
, как и должно быть. Но затем, когда я ввожу ostream &operator<<(ostream &stream, rat &r)
, кажется, что r.p1
и r.p2
не имеют ссылок:
r.p1->d=6683600
r.p2->d=6683536
Если это помогает, я использую g++
компилятор, но это происходит на * Компилятор 1029 *.
Заранее благодарен за любую помощь!
РЕДАКТИРОВАТЬ:
Я пытался перегрузить =
:
rat& rat::operator=(rat r) {
this->p1 = new Poly(*r.p1);
this->p2 = new Poly(*r.p2);
return *this;
}
То же самое с r.p1->d
случилось снова. Кстати, странно то, что r.p1->d
определяется как const
. Я тоже это попробовал:
rat& rat::operator=(rat const& r) {
this->p1 = new Poly(1);
return *this;
}
но похоже, что как только я объявляю новый Poly
, значения меняются (или на него не ссылаются.
Любые мысли