> 백엔드 개발 > C++ > C에서 정적 상수 정수 멤버에 액세스하면 정의되지 않은 참조 오류가 발생하는 이유는 무엇입니까?

C에서 정적 상수 정수 멤버에 액세스하면 정의되지 않은 참조 오류가 발생하는 이유는 무엇입니까?

Susan Sarandon
풀어 주다: 2024-11-30 21:03:21
원래의
850명이 탐색했습니다.

Why Does Accessing a Static Const Integer Member Result in an Undefined Reference Error in C  ?

정적 Const 정수 멤버 및 정의되지 않은 참조 오류

C 언어는 정수 유형에 대한 클래스 정의 내에서 정적 const 멤버 정의를 허용합니다. . 그러나 최근 이에 대한 시도에서 링커 오류가 발생했습니다. 특히 "test"라는 클래스는 값이 10인 정적 const 정수 멤버 "N"을 선언했습니다. 후속 함수에서 "N"에 액세스하여 사용하려고 하면 정의되지 않은 참조 오류로 인해 코드가 실패합니다.

정수형 상수 초기화

클래스 선언에서는 "N"에 대한 초기값 설정을 허용하지만, 이 점에 유의해야 합니다. 완전한 정의가 아닌 단지 초기화일 뿐입니다. C 표준에 따르면 정적 const 적분 멤버에는 클래스 선언 외부의 정의가 필요합니다.

참조 매개변수의 영향

이 경우 범인은 "std::min" 함수. "std::min"은 상수 참조로 매개변수를 취하므로 "N"이 완전히 정의되어야 합니다. "N"에 대한 별도의 정의가 없으면 정의되지 않은 참조 오류가 발생합니다.

오류 방지

문제를 해결하려면 "N"에 대한 정의가 필요합니다. 클래스 선언 외부에 제공됩니다. 이는 별도의 네임스페이스 또는 헤더 파일에서 "N"을 선언하고 초기화하여 달성할 수 있습니다. 또한 "N"이 컴파일 타임에 평가되도록 하려면 "constexpr" 키워드를 사용하는 것이 도움이 될 수 있습니다.

결론

다음에서 발생한 링커 오류 이 인스턴스는 정적 const 정수 멤버 "N"의 불완전한 정의에서 비롯됩니다. 초기화와 정의의 차이점을 이해하고 참조 매개변수의 요구 사항을 해결함으로써 이 문제를 효과적으로 해결할 수 있습니다.

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

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