728x90
이 오류는 선언된 타입이 완전하게 정의되지 않은 상태에서 해당 타입의 객체를 생성하거나 참조하려고 할 때 발생합니다. C언어에서 '불완전 타입(incomplete type)'이란 메모리 크기를 컴파일 타임에 알 수 없는 타입을 의미하며, 이 상태에서는 변수 선언이나 구조체 멤버 접근 등이 허용되지 않습니다.
주로 구조체를 미리 선언만 하고 정의를 하지 않았을 때, 또는 포인터가 아닌 일반 변수로 불완전 타입을 사용할 경우 발생합니다.
● 오류 예제
struct Node; // 전방 선언만 존재
int main() {
struct Node n; // 오류: 불완전 타입으로 객체 생성
return 0;
}
컴파일 시 다음과 같은 오류 메시지를 출력합니다.
error: incomplete type is not allowed
● 해결 방법
불완전 타입을 사용할 경우에는 포인터로만 선언하거나, 해당 타입의 전체 정의를 포함시켜야 합니다.
struct Node {
int data;
};
int main() {
struct Node n; // 이제 정의가 있으므로 정상 작동
n.data = 10;
return 0;
}
● 실전 팁
- 전방 선언(struct Foo;)만으로는 변수나 멤버를 사용할 수 없습니다.
- 불완전 타입은 포인터 선언에는 사용 가능하지만, 직접 변수 선언에는 사용할 수 없습니다.
- 정의가 필요한 경우 헤더 파일이나 해당 타입 정의를 반드시 포함시키세요.
C언어에서는 타입의 정의가 명확하지 않으면 메모리 크기를 알 수 없기 때문에 객체 생성이 불가능합니다. 포인터는 예외적으로 사용할 수 있으나, 실제 사용 전에는 반드시 타입을 완전히 정의해야 합니다.
728x90