>백엔드 개발 >C++ >C에서 \'정적 멤버에 대한 정의되지 않은 참조\' 오류의 원인은 무엇이며 어떻게 해결합니까?

C에서 \'정적 멤버에 대한 정의되지 않은 참조\' 오류의 원인은 무엇이며 어떻게 해결합니까?

Linda Hamilton
Linda Hamilton원래의
2024-12-09 00:39:13662검색

What Causes

정적 멤버에 대한 정의되지 않은 참조가 있다는 것은 무엇을 의미합니까?

C에서 정적 멤버 변수는 객체 인스턴스와 독립적으로 존재하는 클래스 변수입니다. . 일반적으로 컴파일 타임에 초기화되며 클래스의 모든 인스턴스에서 공유할 수 있습니다.

그러나 정의를 제공하지 않고 정적 멤버 변수를 선언하면 컴파일러는 "정의되지 않은 참조"에 대한 오류 메시지를 생성합니다. ." 이는 컴파일러가 정적 변수에 액세스하는 코드를 생성하기 위해 정적 변수의 메모리 위치를 알아야 하기 때문입니다.

이 오류를 해결하려면 소스 파일( .cpp 파일). 정의는 헤더 파일(.h 파일)의 선언과 동일한 이름을 가져야 하지만 앞에는 범위 연산자(::)가 와야 합니다. 예:

// header file
class Example {
public: 
    static int x;
};

// source file
int Example::x;

이것은 정적 변수 x에 대한 메모리 위치를 정의하고 컴파일러가 이에 액세스하는 코드를 생성할 수 있도록 합니다.

특수 사례

  • 상수 정수 또는 열거 유형: 다음과 같은 정적 멤버 변수의 경우 const 정수 또는 열거형 유형의 경우 헤더 파일의 클래스 선언에 초기화 프로그램을 제공할 수 있습니다. 소스 파일의 정의에는 초기화 프로그램이 없어야 합니다.
  • 템플릿: 클래스 템플릿의 정적 멤버 변수의 경우 클래스 정의와 함께 헤더 파일에 정의가 제공되어야 합니다.

정적의 다른 용도

정적 키워드는 다릅니다. 클래스 범위에 없는 객체나 함수에 적용될 때의 의미:

  • 함수 범위의 객체: 함수의 첫 번째 실행 시 초기화되고 유지되는 객체를 선언합니다. 함수 호출 사이의 값입니다.
  • 네임스페이스 범위의 개체 또는 함수: 내부를 사용하여 개체 또는 함수를 선언합니다. linkage는 객체에 대해 더 이상 사용되지 않습니다.

위 내용은 C에서 \'정적 멤버에 대한 정의되지 않은 참조\' 오류의 원인은 무엇이며 어떻게 해결합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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