>백엔드 개발 >C++ >C에서 정적 변수에 액세스할 때 '정적 변수에 대한 정의되지 않은 참조' 오류가 발생하는 이유는 무엇입니까?

C에서 정적 변수에 액세스할 때 '정적 변수에 대한 정의되지 않은 참조' 오류가 발생하는 이유는 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2024-12-30 01:12:16421검색

Why Do I Get

C의 정적 변수 참조 문제

C의 경우 정적이 아닌 클래스 메서드 내에서 정적 변수에 액세스하면 컴파일 오류가 발생할 수 있습니다. 변수가 제대로 정의되지 않았습니다. 흔히 발생하는 오류 중 하나는 "정적 변수에 대한 정의되지 않은 참조"입니다.

문제

다음 코드 조각을 고려하세요.

class Helloworld {
  public:
    static int x;
    void foo();
};

void Helloworld::foo() {
  Helloworld::x = 10;
}

이 코드 비정적 메서드 foo()에서 정적 변수 x에 액세스하는 것을 목표로 합니다. 그러나 이 코드를 컴파일하면 정적 변수 x에 정의가 부족하기 때문에 "정적 변수에 대한 정의되지 않은 참조" 오류가 발생할 수 있습니다.

해결책

해결책은 다음과 같습니다. 클래스 정의 외부에 정적 변수 x에 대한 정의를 제공합니다. 정의는 아래와 같이 클래스 정의 뒤에 추가할 수 있습니다.

class Helloworld {
  public:
    static int x;
    void foo();
};

// Definition of static variable x
int Helloworld::x = 0; // Initialize x to 0 (or any appropriate value)

void Helloworld::foo() {
  Helloworld::x = 10;
}

클래스 정의 외부에서 정적 변수 x를 정의함으로써 컴파일러는 x에 대한 메모리를 찾아 할당할 수 있습니다. 또한 정적 변수를 특정 값으로 초기화하거나 초기화 프로그램이 없을 때 0으로 초기화되도록 허용하는 것이 중요합니다.

이러한 수정을 통해 코드가 성공적으로 컴파일 및 실행되어 다음을 수행할 수 있습니다. Helloworld 클래스의 비정적 멤버 함수에서 정적 변수 x에 액세스합니다.

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

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