|
jonglee 님이 쓰신 글 :
:
: 비교적 많이 쓰는 함수인데 요즘 이상한 점을 발겼했습니다.
: AddObject()의 두 번째 파라메터(TObject*)에 TObject의
: 포인터가 아닌 다른 상수 값을 넣으려고 하는데
: 이 값이 -1인 경우에는 TStrings::Objects[]에 들어가질 않습니다.
:
: 예를 들어
:
: TStrings *list;
: ...
: list->AddObject("first", (TObject) -1);
:
: 이런 식으로 작성하면 list->Strings[0]에는 "first"라는 아이템이
: 들어가지만, list->Objects[0]에는 아무것도 들어가지 않습니다.
: 이것을 보려고 하면 익셉션이 뜨는군요.
:
: -2, -3도 괜찮은데 오직 -1만 안되는걸로 봐서
: 이 함수의 내부에서 뭔가 특별한 용도로 쓰는것 같기도 하고..
: 헬프에도 없고... 버그인가?
:
: 암튼 그렇습니다.
: 별로 고민될 것도 없는 부분에서 이런 문제가 생겨서
: 몇 시간 고생했네요. 흑.
안녕하십니까?
한꼬맹이 입니다.
이상하네요...
TStrings 추상클래스라서 인스턴스 생성할수 없을텐데요...
그렇다면 TStrings에서 상속받은 클래스라고 가정한다면...
AddObject()메소드의 두번째인자에 들어가는 것은 TObject로 부터 상속받은 모든 클래스의 포인터 주소를
말합니다, 즉 VCL에서만 사용하는 모든 클래스가 해당되는 거죠.. 이것은 다시 컴퓨터 입장에서는
클래스의 메모리상의 시작주소를 뜻하는 거죠,,,
그렇니까 결론은 TObject로 상속받은 클래스의 포인터만 들어갈수 있다는겁니다..
그럼 참고하세요
|