#cpp
В следующем фрагменте кода: #include#include using std::cout; class Point { int x; public: Point(int x) { this->x = x; } Point(Point p) { x = p.x; } int getX() { return x; } }; int main(int argc, char* argv[]) { Point p1(10); Point p2 = p1; printf("%d", p2.getX()); return 0; } Компилятор выдает такую ошибку: invalid constructor; you probably meant 'Point (const Point&) Почему так происходит?
Ответы
Ответ 1
В C++ конструктор копирования не может принимать копию объекта этого же класса, а вот по ссылке может (т.е. в вашем случае подойдет Point(Point& p), либо Point(const Point& p)). Представим, что такое допустимо Получается, что таким образом вы переопределяете конструктор копирования по умолчанию, тогда у компилятора не остается выбора (на самом деле просто запрещен такой вызов, но так звучит убедительнее) кроме как попытаться снова вызвать именно ваш конструктор копирования для передачи параметра в ваш же конструктор копирования и так далее (бесконечная рекурсия получается).Ответ 2
Потому что копирующий конструктор должен иметь одну из стандартных форм: Point(const Point & copy); Point( Point & copy); Point(const volatile Point & copy); Point( volatile Point & copy);
Комментариев нет:
Отправить комментарий