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

C++빌더 Q&A
C++Builder Programming Q&A
[19865] Re:캐스트에 대해서 약간.....
빌더조아 [] 673 읽음    2002-07-06 00:31
생성자에서 const에 대한 이해가 부족해서 생긴것 같네요.

'const'로 지정되면 값이 변하지 않는다는 의미입니다.
const에 대해서 책을 찾아 보세요.

char * hobby;  <= hobby의 값은 바꿀수 있습니다.
const char * ho; <= ho의 값은 바뀔수 없는 것입니다.

hobby = ho;      <= ho의 값을 바꿀수 없는데, hobby에 그 주소값을 주면
                    ho의 값을 바꿀수 있기 때문에 컴파일러가 에러를 보여줍니다.

hobby = (char *)ho; <= 따라서 ho의 값을 변경할수 있게 ho의 타입을 강제적으로
                       바꾸었군요. 좋은 방법은 아니네요..

오히려 class만들적에,
다음줄을
cow(const char * nm, const char * ho, double wt);
이렇게 바꾸시구요.
cow(const char * nm, char * ho, double wt);
함수에서도
cow::cow(const char * nm, char * ho, double wt)
{
...
}
으로 바꾸시면, 캐스팅 안해도 됩니다.

또한 *hobby = *ho; 줄은 hobby가 가리키는 주소에 *ho의 값을 복사하는 것인데,
hobby의 주소는 초기화 해주질 않았으므로 어디를 가르킬지 모릅니다.
메모리 참조 에러가 나는 것은 당연한 것이겠지요.

exkarion 님이 쓰신 글 :
: 어설픈 클래스를 만들긴 했는데요....
:
: 생성자를 오버로드를 몇개 만들긴 했는데....
:
: 캐스트 연산자를 안쓰니 제대로 돌아가질 않는군요....
:
: class cow
: {
:     private:
:         char name[20];
:         char * hobby;
:         double weight;
:     public:
:         cow();
:         cow(const char * nm, const char * ho, double wt); //이부분의 생성자가
:         cow(const cow & c);
:         ~cow();
:         cow operator=(const cow & c);
:         void showcow();
: };
:
: cow::cow(const char * nm, const char * ho, double wt) //이겁니다.
: {
:     strcpy(name, nm);
:     hobby = (char*)ho; //이렇게 쓰면 제대로 컴파일됩니다. 근데 hobby = ho; 라고 쓰면...
:     weight = wt;
: }
:
: 제대로 컴파일이 안되고.... *hobby = *ho; 라고 쓰면 컴파일은 되는데
:
: 실행시 메모리 참조 에러가 생기는군요......
:
: 아직 포인터에 대한 이해가 모자란 걸까요......흠.....
:
: 둘다 캐릭터형 포인터인데...흠.....헷갈리네요....
:
: 좋은 답변 부탁드리고 혹시 포인터에대한 이해를 도울만한 내용을 알고 계신분은
:
: 알려주심 감사하겠습니다.

+ -

관련 글 리스트
19864 캐스트에 대해서 약간..... exkarion 649 2002/07/05
30158     Re:캐스트에 대해서 약간..... 나우시카 670 2002/07/06
19865     Re:캐스트에 대해서 약간..... 빌더조아 673 2002/07/06
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.