프로그래밍 언어/C++

C ++에서 개인 정적 멤버를 초기화하는 방법

Rateye 2021. 6. 8. 13:57
728x90
반응형
질문 : C ++에서 개인 정적 멤버를 초기화하는 방법은 무엇입니까?

C ++에서 개인 정적 데이터 멤버를 초기화하는 가장 좋은 방법은 무엇입니까? 내 헤더 파일에서 이것을 시도했지만 이상한 링커 오류가 발생합니다.

class foo
{
    private:
        static int i;
};

int foo::i = 0;

클래스 외부에서 개인 멤버를 초기화 할 수 없기 때문이라고 생각합니다. 그래서 이것을하는 가장 좋은 방법은 무엇입니까?

답변

클래스 선언은 헤더 파일 (또는 공유되지 않는 경우 소스 파일)에 있어야합니다.
파일 : foo.h

class foo
{
    private:
        static int i;
};

그러나 초기화는 소스 파일에 있어야합니다.
파일 : foo.cpp

int foo::i = 0; 

초기화가 헤더 파일에있는 경우 헤더 파일을 포함하는 각 파일에는 정적 멤버의 정의가 있습니다. 따라서 링크 단계에서 변수를 초기화하는 코드가 여러 소스 파일에 정의되므로 링커 오류가 발생합니다. static int i 의 초기화는 모든 함수 외부에서 수행되어야합니다.

참고 : Matt Curtis : 정적 멤버 변수가 const int 유형 (예 : int , bool , char ) 인 경우 C ++에서 위의 단순화를 허용한다고 지적합니다. 그런 다음 헤더 파일의 클래스 선언 내에서 직접 멤버 변수를 선언하고 초기화 할 수 있습니다.

class foo
{
    private:
        static int const i = 42;
};
출처 : https://stackoverflow.com/questions/185844/how-to-initialize-private-static-members-in-c
728x90
반응형