C++ 복사생성자 질문
안녕하세요..
이곳에는 처음 질문을 올려봅니다.
C++ 복사생성자에 대한 질문인데요,,
아래 소스가 복사생성자가 없을 때는 잘 컴파일되는데,
복사생성자를 추가해주면 컴파일에러가 납니다.
---에러---
# g++ Point.cpp
Point.cpp: In function `int main()':
Point.cpp:73: no matching function for call to `Point::Point(Point)'
Point.cpp:29: candidates are: Point::Point(Point&)
그런데 Microsoft Visual C++ Toolkit 2003를 사용하면
복사생성자가 있든 없든 컴파일이 잘 됩니다.
왜 그런지,,
소스에 문제가 있습니까? 아니면 컴파일가 문제인지요?
---소스---
#include
using namespace std;
class Point
{
public:
Point(int ax, int ay);
//Point(Point &); <---copy constructor
~Point();
void SetPoint(int ax, int ay);
int x,y;
};
Point::Point(int ax, int ay)
{
printf("Point(%d, %d)\n", ax, ay);
SetPoint(ax,ay);
}
//Point::Point(Point &other)
//{
// printf("Point&(%d, %d)\n", other.x, other.y);
// SetPoint(other.x, other.y);
// x=other.x;
//}
Point::~Point()
{
printf("~Point(%d, %d)\n", x, y);
}
void Point::SetPoint(int ax, int ay)
{
x=ax;
y=ay;
}
Point f1(Point p)
{
printf("x=%d, y=%d\n", p.x, p.y);
p.SetPoint(7,9);
Point q=p;
q.SetPoint(3,5);
printf("88888\n");
return q;
}
int main()
{
Point p(1,2);
Point q=f1(p);
printf("----\n");
return 0;
}
---복사생성자가 없을 때 결과---
# g++ Point.cpp
# ./a.out
Point(1, 2)
x=1, y=2
88888
~Point(7, 9)
----
~Point(3, 5)
~Point(1, 2)
===추가==================
복사생성자를 아래와 같이 수정하였더니 컴파일이 되는군요
Point(Point &); ----> Point(const Point &);
예전에 const가 꼭 필요한 건지 몰랐었는데요,
복사생성자와 할당연산자에 const가 꼭 필요한거였나요?


댓글 달기