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

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

DDD
풀어 주다: 2024-12-04 12:34:10
원래의
674명이 탐색했습니다.

Why Does My C   Code Produce

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

"typeinfo에 대한 정의되지 않은 참조" 링커 오류가 발생하면 이러한 메시지의 근본적인 이유. 한 가지 잠재적인 원인은 정의를 제공하지 않고 가상 함수를 선언하는 것입니다.

가상 함수는 다형성을 허용하여 파생 클래스가 기본 클래스에서 상속된 메서드를 재정의하고 다른 구현을 제공할 수 있도록 합니다. 그러나 가상 함수가 정의 없이 선언되면 컴파일러는 구현이 다른 곳에서 제공된다는 것을 나타냅니다. 이는 링커가 연결 단계에서 다른 컴파일 단위나 라이브러리를 참조하여 누락된 정의를 찾으려고 시도한다는 것을 의미합니다.

이 오류를 제거하려면 가상 함수에 정의가 수반되어야 합니다. 이는 함수 선언을 구현과 연결하여 링커가 나중에 참조를 확인하려고 시도하는 것을 방지합니다. 정의된 가상 함수는 다음과 같습니다.

virtual void fn() { /* insert code here */ }
로그인 후 복사

반대로, 정의가 없는 가상 함수 선언은 다음과 유사합니다.

virtual void fn();
로그인 후 복사

이 선언은 정의를 제공하지 못하여 "정의되지 않음"이 발생합니다. typeinfo 참조" 오류.

유사하게 정의하지 않고 외부 변수를 선언하는 것과 비슷합니다. it:

extern int i;
int *pi = &i;
로그인 후 복사

이 경우 컴파일러는 'i' 정수가 다른 곳에서 선언되었으며 연결 중에 해결되어야 함을 나타냅니다. 그렇지 않으면 pi는 해당 주소를 참조할 수 없습니다.

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

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿