2012-12-18 2 views
4

다음과 같은 DCC 오류가 계속 발생합니다. 게시 된 필드 'name'은 다음 클래스의 클래스 또는 인터페이스 유형이 아닙니다.DCC 오류 : 게시 된 필드가 클래스 또는 인터페이스 유형이 아닙니다.

TGroup = class 
    name:string[32]; <<<======================== 
    rwFeatures:TFeatures; 
    roFeatures:TFeatures; 
    levels:TLevels; 
    private 

    public 
    constructor Create; 
    procedure Read(var f:file); 
    procedure ReadOld(var f:file); 
    procedure Write(var f:file); 
    end; 

이게 무슨 의미입니까?

답변

5

클래스는 Emit runtime type information 설정을 사용하여 컴파일됩니다. 클래스가 런타임 유형 정보로 컴파일되면 기본 표시 유형은 published입니다. 즉, 짧은 문자열 필드는 published입니다. 짧은 문자열 필드는 게시 할 수 없습니다.

documentation는 말한다 :

필드가 클래스 또는 인터페이스 타입 인 경우에만 게시 할 수 있습니다

.

상당히 엄격한 요구 사항입니다. 예를 들어 정수 또는 부울 필드를 게시 할 수 없다는 의미입니다.

게시 된 필드의 기본 용도는 개체 참조 용이므로이 제한이 있다고 생각됩니다. 양식의 구성 요소를 생각해보십시오.

다음 옵션 중 하나를 사용하여 문제를 해결 :

  1. 는이 클래스의 런타임 타입 정보를 방출하지 마십시오.
  2. 짧은 문자열 필드를 게시하지 않고 공개로 설정하십시오.
  3. 필드가 아닌 속성을 사용하십시오.
+0

오해의 소지가있어서 이전의 의견을 삭제했습니다. 게시 된 필드가 짧은 문자열 유형을 가질 수는 없지만 명시 적 가시성이없는 필드는 게시되지 않기 때문에'{$ M-} '로 컴파일됩니다. – hvd

+0

@hvd 네, 맞습니다. 나는 당신이 방금 설명하기 전까지 그것을 오해했습니다. 고맙습니다. –

+0

@hvd 나는이 질문에 대해 내가'출판 된'주변의 모든 세부 사항을 완전히 오해 한 것을 배웠다. 나를 올바른 방향으로 가리켜 주셔서 다시 한번 감사드립니다. 훌륭한 문서를 읽었을 때, 저는 다른 사람들과 같은 페이지에 있지 않습니다! –