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
[479] [답변] 악똥/ 빌더1.0소스를 빌더3.0으로 컴파일하는 방법?/프포
박지훈.임프 [cbuilder] 4847 읽음    1998-08-02 23:50
안녕하세요. 천리안 프로그래머포럼 C++Builder 담당자 임펠리테리입니다.

빌더 1에서 작성된 프로젝트 소스를 빌더 3에서 컴파일할 때 가장 문제가 되는 부분

은 write에 사용된 프로퍼티의 리턴값을 read 할수 없다는 경우입니다.

구체적인 예를 들어보죠.

빌더의 빈폼에 버튼 하나를 놓고 그 클릭 이벤트 핸들러를 다음과 같이 작성했다고

가정해봅시다.

void __fastcall TForm1::Button1Click(TObject *Sender)
{
    Button1->Caption = Caption = "11";
}

이 문장은 Ansi C++문법에 적법해 보이고, 아무런 문제도 없어보이지만 실제로 컴파

일을 해보면 다음과 같은 컴파일 에러메시지가 뜨게 됩니다.

Cannot use the result of property assignment as an rvalue.

빌더1에서 별다른 문제없이 컴파일되었던 소스가 이와 같은 에러를 낼수밖에 없는

근본적인 원인은, 보통 프로퍼티를 그냥 변수처럼 사용하고 있지만 사실은 read와

write로 나누어진 두 함수의 결합이기 때문입니다. 위 문장을 read와 write함수의

역할로 다시 생각해보면, "11"이란 문자열을 폼의 Caption 프로퍼티의 wrtie함수에서

받고 있습니다. 그리고 그 리턴값을 다시 Button1의 Caption 프로퍼티에 할당하고 있

는 거죠. 그런데, 일반적으로는 어떤 프로퍼티의 write메소드의 리턴값은 read메소드

의 리턴값과 같지만, 특수한 에러코드의 처리등과 같이 그렇지 않은 경우도 있습니다.

그래서 프로퍼티의 write 메소드의 리턴값을 그대로 read 메소드의 리턴값으로 간주

할 수 없도록 빌더3에서 아예 막아버린거죠.

위와 같은 문제가 생겼을때 해결은 간단합니다. 두 문장으로 나누어버리면 되는거죠.

Caption = "11";
Button1->Caption = Caption;


이외에도 빌더1으로 작성된 소스를 빌더3에서 컴파일할 때 생기는 문제는 몇가지가

더 있었던 것 같지만, 그렇게 크게 문제가 되었던 것 같지는 않습니다. 참, 빌더3에

서는 패키지 개념이 도입되어 프로젝트 옵션에서 패키지를 포함시키지 않고 컴파일했

을 경우 배포시에 패키지 화일들이 없으면 실행이 안되는 문제도 있겠죠. 이에 대해

서는 아래 글들중에 자세한 답변이 있으니 찾아보시기 바랍니다.

도움되시길 바라면서, 그럼 이만...



독립문에서 임펠리테리였습니다.

(cbuilder, skyhi18)



+ -

관련 글 리스트
477 [질문] 빌더1.0소스를 빌더3.0으로 컴파일하는 방법?/프포 악똥 4905 1998/07/31
479     [답변] 악똥/ 빌더1.0소스를 빌더3.0으로 컴파일하는 방법?/프포 박지훈.임프 4847 1998/08/02
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.