클래스 정의에서 정적 Const 정수 멤버 정의 시 링커 오류
C의 클래스 선언을 사용하면 클래스 내에서 정적 const 정수 멤버를 정의할 수 있습니다. 수업. 그러나 제공된 예제와 유사한 코드에서 링커 오류가 발생할 수 있습니다.
class test { public: static const int N = 10; }; int main() { std::cout << test::N << "\n"; std::min(9, test::N); }
컴파일러가 클래스 정의를 허용하는 동안 링커는 test::N에 대한 정의되지 않은 참조를 보고합니다. 클래스의 선언이 실제 정의가 아니기 때문에 문제가 발생합니다.
C에서 정적 const 정수 멤버는 네임스페이스 범위의 클래스 외부에서 정의되어야 합니다. 이는 C 표준(9.4.2/4)에 따라 클래스 선언 내에서 초기화될 수 없기 때문입니다.
정적 데이터 멤버가 const 정수 또는 const 열거 유형인 경우 클래스 정의의 해당 선언 상수 초기화 프로그램을 지정할 수 있습니다. [...] 이 경우 멤버는 정수 상수 표현식에 나타날 수 있습니다. 멤버가 프로그램에서 사용되고 네임스페이스 범위 정의에 초기화 프로그램이 포함되지 않으면 멤버는 여전히 네임스페이스 범위에 정의되어야 합니다.
링커 오류를 해결하려면 클래스 외부에서 정적 const 멤버를 정의할 수 있습니다. , 일반적으로 해당 소스 파일에 있습니다.
const int test::N = 10;
또는 C 11 이상의 경우 constexpr 키워드를 사용하여 클래스 내에서 실제 정의를 생성할 수 있습니다. 선언:
class test { public: static constexpr int N = 10; };
위 내용은 C 클래스에서 Static Const Integer 멤버를 정의할 때 링커 오류가 발생하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!