struct 클래스를 서브타입으로 만들 수 없음
struct 클래스를 서브타입으로 만들 수 없음 (subtype_of_struct_class)
이 문서는 Dart 분석기(analyzer)가 만들어 내는 subtype_of_struct_class 진단(diagnostic)에 대한 상세한 내용을 설명하는 문서예요. Struct나 Union을 상속하는 클래스를 또 상속·구현·믹스인할 때 분석기가 이 진단을 알려 줘요. 어떤 상황에서 발생하고 어떻게 고치는지 함께 알아볼게요.
본문
진단 메시지
The class '{0}' can't extend '{1}' because '{1}' is a subtype of 'Struct', 'Union', or 'AbiSpecificInteger'.
클래스 '{0}'은(는) '{1}'이(가) 'Struct', 'Union', 또는 'AbiSpecificInteger'의 서브타입이기 때문에 '{1}'을(를) 상속(extend)할 수 없어요.
The class '{0}' can't implement '{1}' because '{1}' is a subtype of 'Struct', 'Union', or 'AbiSpecificInteger'.
클래스 '{0}'은(는) '{1}'이(가) 'Struct', 'Union', 또는 'AbiSpecificInteger'의 서브타입이기 때문에 '{1}'을(를) 구현(implement)할 수 없어요.
The class '{0}' can't mix in '{1}' because '{1}' is a subtype of 'Struct', 'Union', or 'AbiSpecificInteger'.
클래스 '{0}'은(는) '{1}'이(가) 'Struct', 'Union', 또는 'AbiSpecificInteger'의 서브타입이기 때문에 '{1}'을(를) 믹스인(mix in)할 수 없어요.
설명
분석기는 클래스가 Struct나 Union을 상속하는 클래스를 상속, 구현, 믹스인할 때 이 진단을 만들어 내요. 클래스는 Struct나 Union만 직접 상속할 수 있어요. FFI에 대한 자세한 내용은 dart:ffi를 이용한 C 상호 운용 문서를 참고해요.
예시
다음 코드는 클래스 C가 Struct를 상속하는 S를 상속하기 때문에 이 진단을 만들어 내요.
import 'dart:ffi';
final class S extends Struct {
external Pointer f;
}
final class C extends S {
external Pointer g;
}
일반적인 해결 방법
다른 struct나 union이 선언한 일부 필드를 공유하는 struct나 union을 정의하려는 거라면, Struct나 Union을 직접 상속하고 공유 필드를 복사해 주세요.
import 'dart:ffi';
final class S extends Struct {
external Pointer f;
}
final class C extends Struct {
external Pointer f;
external Pointer g;
}
더 알아보기
- Dart 분석기 진단 목록에서 다른 진단들도 함께 살펴보세요.
- FFI에 대한 자세한 내용은 dart:ffi를 이용한 C 상호 운용 문서를 참고해요.