Turbo-C
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
터보-C 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
Lua 게시판
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C/C++ Q/A
[6628] Re:Re:Re:Re:멤버함수 중첩시키기에서 에러메세지...
c장군 [bjg0713] 12137 읽음    2011-11-17 20:49
"함수 부분을 이해를 못하신거네요...
사실 에러 메세지에 설명이 다 나와 있는건데..
책에서..
함수 부분에서 프로토 타입 or 함수 원형에 대해서 찾아보세요.. "

달랑 이렇게 쓰셨습니다. 글을 올리실거면 진작에 아래의 글처럼 올리셨어야지요.
위와 같이 글을 올리시면 성의없는 답글이 아닙니까? 대 볼랜드포럼에서....
무엇이 잘못 되었는지 문제를 해결하려면 어떤 실험이나 시도를 해보아야 하는지 하는 것들 말입니다.
단지 자기가 뭘좀 안다고 해서 " ... " 와 같은 글을 올리신다면 상처만 받습니다.
책에 있는 소스를 그대로 올리는 하수가 그런 답글을 보면 공부할 맛 나겠습니까?
보아하니 전공자이거나 꽤 고수인것 같은데 벼는 익을수록 고개를 숙이고 나같은 하수에게는 좀 친절할 것이라고 생각은 되는데 무리인가요?
아 참 그리고 메인함수에서 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 ; 를 했더니 에러도 없어지고, 출력 결과도 책에 있는 것과 동일해 졌는데,
여기서 문제가 있으면 언급해 주시지요. 그리고, 함수부분을 어떻게 이해를 못했다는 것인지 와 원하지 않는 내용(아래의 답글)이라는 것은 무엇인지 언급해주시면 감사하겠습니다. 

신성기 님이 쓰신 글 :
: 문제를 해결하신 것 같은데, 원인 분석이 잘 못 되어 언급하고 싶네요.
:
: 클래스 객체(? 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.
: : : : 이라고 출력됩니다.
: : : : 어디서 무엇이 문제인지 좀 어렵네요.

+ -

관련 글 리스트
6622 멤버함수 중첩시키기에서 에러메세지... c장군 10064 2011/11/16
6624     Re:멤버함수 중첩시키기에서 에러메세지... Intotheblue 10452 2011/11/16
6625         Re:Re:멤버함수 중첩시키기에서 에러메세지... c장군 9234 2011/11/16
6627             Re:Re:Re:멤버함수 중첩시키기에서 에러메세지... 신성기 17260 2011/11/17
6628                 Re:Re:Re:Re:멤버함수 중첩시키기에서 에러메세지... c장군 12137 2011/11/17
6626             Re:Re:Re:멤버함수 중첩시키기에서 에러메세지... Lyn 10462 2011/11/16
6630                 Re:Re:Re:Re:멤버함수 중첩시키기에서 에러메세지... c장군 12417 2011/11/17
6631                     Re:Re:Re:Re:Re:멤버함수 중첩시키기에서 에러메세지... Lyn 8402 2011/11/17
6632                         Re:Re:Re:Re:Re:Re:멤버함수 중첩시키기에서 에러메세지... c장군 10657 2011/11/17
6633                             Re:Re:Re:Re:Re:Re:Re:멤버함수 중첩시키기에서 에러메세지... Lyn 12282 2011/11/17
6635                                 멤버함수 중첩시키기에서 에러메세지...(Lyn님 감사합니다.) c장군 10847 2011/11/17
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.