문제를 해결하신 것 같은데, 원인 분석이 잘 못 되어 언급하고 싶네요.
클래스 객체(? instance)로 접근해야 하는 것은 맞습니다. 호출하고 싶은 함수가 클래스 멤버인 DrawShape()였다면 말이죠.
함수 원형이 없다는 오류 메시지도 틀린 것은 아닙니다.
컴파일러는 Rectangle::DrawShage()에 대한 정보만 있을 뿐, DrawShape()에 대한 정보가 없으니 오류가 생긴 겁니다.
그리고, 또 한가지,
반환형이 void가 문제가 아닙니다.
사용하신 <<는 연산자(operator)입니다.
일종의 함수라는 뜻입니다.
원형(prototype)은 다음과 같습니다.
ostream& operator<< (...);
(...라고 표시한 것은 모두 표현할 수 없어서 그렇게 한 것 입니다.)
cout << "DrawShape()\n" << DrawShape() << endl;
위 처럼 사용하신 것 자체가 문제로 보여집니다.
(DrawShape()라는 함수의 내용이나 목적만으로 보면)
즉, 반환형이 void여서 생기는 문제가 아니라 원하지 않는 내용으로 구문을 작성한 것이 더 근본적인 문제인 것이지요.
마지막으로,
(이 글을 쓰게 된 진짜 이유입니다.)
질문하시는 입장에서 답변자에 대해, "소스를 안보셨군요."라고 표현 하는 것은 맞지 않다고 생각합니다.
최소한의 예의를 갖추고, 답변자가 무엇을 얘기하고자 하는 것인지 다시 한번 생각해 보시는 것이 뭔가를 배울 수 있는 자세가 아닐까 생각합니다.
즐거운 하루 되세요.
c장군 님이 쓰신 글 :
: 소스에 함수의 원형과 정의가 없는 것이 문제가 아니었습니다. 있었으니까요. 소스를 안보셨군요.
: 멤버함수의 반환형이 문제였습니다. 클래스 객체로 접근해야 하는 것도 있지요.
: theRect.DrawShape() 이렇게 말이지요.
: 반환형이 void일 때는 theRect가 Illegal structure(부정한 구조)라고 메세지가 나옵니다.
: void가 아니어야 합니다.
:
: Intotheblue 님이 쓰신 글 :
: : 함수 부분을 이해를 못하신거네요...
: : 사실 에러 메세지에 설명이 다 나와 있는건데..
: :
: : 책에서..
: : 함수 부분에서 프로토 타입 or 함수 원형에 대해서 찾아보세요..
: :
: : c장군 님이 쓰신 글 :
: : : 소스는 인포북에 있는 것이고요. 그런데, 컴파일러는 에러메세지를 냅니다.
: : : 소스는 다음과 같습니다.
: : : #include <iostream.h>
: : : typedef unsigned short int USHORT;
: : :
: : : class Rectangle
: : : {
: : : public:
: : : Rectangle(USHORT width , USHORT height);
: : : ~Rectangle(){}
: : :
: : : void DrawShape() const;
: : : void DrawShape(USHORT width , USHORT height) const;
: : :
: : : private:
: : : USHORT Width;
: : : USHORT Height;
: : : };
: : :
: : : Rectangle::Rectangle(USHORT width , USHORT height)
: : : {
: : : Width = width;
: : : Height = height;
: : : }
: : :
: : : void Rectangle::DrawShape() const
: : : {
: : : DrawShape(Width , Height);
: : : }
: : :
: : : void Rectangle::DrawShape(USHORT width , USHORT height) const
: : : {
: : : for(USHORT i=0 ; i<height ; i++)
: : : {
: : : for(USHORT j=0 ; j<width ; j++)
: : : {
: : : cout << "*";
: : : }
: : : cout << "\n";
: : : }
: : : }
: : :
: : : void main()
: : : {
: : : Rectangle theRect(30,5);
: : :
: : : cout << "DrawShape()\n" << DrawShape() << endl;
: : :
: : : cout << "\nDrawShape(40,2)\n" << DrawShape(40,2) << endl;
: : : }
: : : 에서 컴파일 에러메세지는
: : : Error : Function "DrawShape" should have a prototype.
: : : 이라고 출력됩니다.
: : : 어디서 무엇이 문제인지 좀 어렵네요.
|