>백엔드 개발 >C++ >g에서 'typeinfo에 대한 정의되지 않은 참조' 오류가 발생하는 이유는 무엇입니까?

g에서 'typeinfo에 대한 정의되지 않은 참조' 오류가 발생하는 이유는 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2024-12-03 06:18:10241검색

Why Does g   Produce

G: "Typeinfo에 대한 정의되지 않은 참조" 오류 이해

"typeinfo에 대한 정의되지 않은 참조" 오류는 C 프로그램을 컴파일할 때 자주 발생합니다. g . 이는 링커가 특정 클래스에 대한 유형 정보를 찾을 수 없음을 의미하며, 이는 여러 가지 원인이 있을 수 있습니다.

원인: 정의 없이 가상 함수 선언

이 오류는 동일한 컴파일 단위에서 정의를 제공하지 않고 가상 함수를 선언하는 것입니다. 가상 함수를 정의하지 않고 선언하면 해당 정의가 후속 컴파일 단위나 외부 라이브러리 등 다른 곳에 존재한다고 제안하는 것입니다.

따라서 연결 단계 동안 컴파일러는 다른 위치에서 가상 함수의 정의를 검색합니다. 개체 파일 또는 라이브러리. 정의를 찾을 수 없으면 "typeinfo에 대한 정의되지 않은 참조" 오류가 발생합니다.

예: 잘못된 선언

virtual void fn();

이 선언은 컴파일러에 다음을 알립니다. fn()이라는 가상 함수가 존재하지만 구체적인 내용을 제공하지 않습니다. 구현.

예: 올바른 정의

virtual void fn() { /* Implementation code here */ }

가상 함수에 정의를 제공하면 링커는 더 이상 다른 곳에서 해당 정의를 검색할 필요가 없습니다. 오류.

유추: 외부 변수 해결 방법

이 동작은 하나의 컴파일 단위에서 외부 변수를 선언하고 명시적인 정의를 제공하지 않고 다른 단위에서 해당 변수에 액세스하려고 시도하는 것과 유사합니다.

extern int i;
int *pi = &i;

여기서 변수는 i는 외부적으로 선언되어 해당 정의가 다른 컴파일 단위에 있음을 나타냅니다. 링크 타임에 이 정의를 사용할 수 없는 경우 컴파일러는 "정의되지 않은 참조" 오류를 생성합니다.

이 오류를 방지하고 C 코드를 성공적으로 컴파일하려면 이 오류의 근본 원인을 이해하는 것이 중요합니다.

위 내용은 g에서 'typeinfo에 대한 정의되지 않은 참조' 오류가 발생하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.