감사합니다. 그런데, 아뿔사 제가 빠트린것이 있었습니다. 앗 실수... 아 이럴수가....
멤버 함수의 선언과 정의에서 반환형이 있어야 하는데 둘중 한곳을 빠뜨렸었네요.
그냥 됩니다. 잘....
Lyn 님이 쓰신 글 :
: DrawShape 는 전역함수
: Rectangle::DrawShape는 멤버함수입니다
:
: 위 코드에선 전역 함수 DrawShape가 선언/정의 되어 있지 않은데 호출하려 시도하고있죠
:
: c장군 님이 쓰신 글 :
: : 아 참 그리고 메인함수에서 cout << ... << DrawShape() ... 이것은 아니었습니다.
: : 사실 제가 임의로 바꾸어본것입니다.
: : 원래는
: : void main()
: : {
: : Rectangle theRect(30,5) ;
: : cout << "DrawShape()\n" ;
: : DrawShape() ;
: : cout << "\nDrawShape(40,2)\n" ;
: : DrawShape(40,2) ;
: : }
: : 이었습니다. 그런데, 이렇게 하면 어떻게 될까하고 바꾸어본 것인데 이곳에 글을 올릴 때 원래대로 해놓았어야 했는데 제가 좀 깜빡했네요.
: : 그래도,
: : theRect.DrawShape(); 와 같은 식으로 코드를 다음과 같이 바꾸어도
: : void main()
: : {
: : cout << "DrawShape()\n" ;
: : Rectangle theRect(30,5) ;
: : theRect.DrawShape() ;
: : cout << "\nDrawShape(40,2)\n" ;
: : DrawShape(40,2) ;
: : }
: : 멤버함수의 반환형이 void 일 때 Illegal structure의 에러메세지가 출력되어서 void를 int로 바꾸고
: : 함수의 종료직전 return 0 ; 를 했더니 에러도 없어지고, 출력 결과도 책에 있는 것과 동일해 졌는데요.
: :
: : 와 같은 글을 추가 수정할려고 했느데 무척 빨리 답글을 올리시네요. 무지하게 고맙습니다.
: : 제가 극 하수라서 그러는데요 DrawShape 와 Rectangle::DrawShape 는 어떤 차이가 있습니까?
: : theRect.DrawShape 와 Rectangle::DrawShape 는 Rectangle의 객체(theRect)로 접근한
: : 클래스 멤버함수 와 그 원형의 관계 아닙니까?
: : 그런데, 여기서 왜 멤버함수의 반환형이 void 이면 Illegal structure의
: : 에러메세지가 나오는 것인지 아신다면 좀 제대로 글을 올려주시면 감사하겠습니다.
: : 역시 볼랜드포럼이구나 하는 생각이 들것 같습니다.
: :
: : Lyn 님이 쓰신 글 :
: : : 제눈엔 DrawShape 가 안보이네요. Rectangle::DrawShape 만 보이구요.
: : :
: : : c장군 님이 쓰신 글 :
: : : : 선언/정의가 안된 함수라고요.
: : : :
: : : : void DrawShape() const;
: : : : void DrawShape(USHORT width , USHORT height) const;
: : : :
: : : : 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";
: : : : }
: : : : }
: : : : 이것은 함수 선언/정의가 아니라고요. 그럼 어떻게 해야 합니까? 워낙 제가 하수라서 무슨 말인지 모르겠습니다.
: : : :
: : : : Lyn 님이 쓰신 글 :
: : : : : ... 선언/정의가 안된 함수를 호출하고 계시네요
: : : : :
: : : : : 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.
: : : : : : : : 이라고 출력됩니다.
: : : : : : : : 어디서 무엇이 문제인지 좀 어렵네요.
|