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

C의 정적 멤버에서 \'정의되지 않은 참조\' 오류가 발생하는 이유는 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-12-07 22:27:13437검색

Why Am I Getting

정적 멤버에 대한 정의되지 않은 참조: 초보자 가이드

정적 데이터 멤버는 클래스 인스턴스 간에 정보를 공유하기 위해 사용되는 경우가 많습니다. 그러나 개발자는 정적 데이터 멤버를 사용할 때 "정의되지 않은 참조" 오류가 발생하는 경우가 있습니다. 이 문제는 선언과 정의의 차이로 인해 발생합니다.

선언 및 정의 이해

선언은 메모리 위치를 지정하지 않고 변수의 존재를 컴파일러에 소개합니다. 반면 정의는 변수에 메모리를 할당하고 해당 주소를 제공합니다.

정적 데이터 멤버의 경우 해당 선언은 클래스 정의 내에서 발생하지만 주소를 할당하지는 않습니다. 실제 정의는 별도로 제공되어야 합니다.

정적 데이터 멤버 정의

"정의되지 않은 참조" 오류를 해결하려면 일반적으로 클래스 정의 외부에 정적 데이터 멤버를 명시적으로 정의합니다. 구현 파일(.cpp). 예를 들어 다음 코드를 고려해보세요.

// Header file (.h)
class Example {
    static bool exampleStaticMember;
};

// Implementation file (.cpp)
bool Example::exampleStaticMember;

정수형 및 열거형에 대한 예외

정수형 또는 열거형 유형의 정적 데이터 멤버는 클래스 내에서 직접 초기화될 수 있습니다. 정의:

class Example {
    static const int initialized = 15;
};

이 경우 구현 파일의 정의는 초기화:

const int Example::initialized;

템플릿의 정적 데이터 멤버

템플릿의 경우 정적 데이터 멤버는 클래스 선언과 함께 헤더 파일 내에 정의됩니다. 단일 정의 규칙에 대한 예외는 클래스 템플릿의 정적 데이터 멤버에 대한 여러 정의를 허용합니다.

"정적"의 다른 용도

클래스 범위를 넘어서는 "정적"은 추가 의미:

  • 함수 범위 내에서 함수 전반에 걸쳐 값을 유지하는 영구 객체를 생성합니다. 호출합니다.
  • 네임스페이스 범위에서는 내부 연결을 사용하여 개체와 함수를 선언하지만 개체에 대해서는 이러한 사용을 권장하지 않습니다.

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

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