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
반응형
'프로그래밍 언어 > C++' 카테고리의 다른 글
C ++에서 ifstream을 사용하여 한 줄씩 파일 읽기 (0) | 2021.06.09 |
---|---|
정적 std :: map 초기화<int, int> C ++에서 (0) | 2021.06.08 |
C ++에서 가상 함수가 필요한 이유 (0) | 2021.06.08 |
C ++ 여러 줄 문자열 리터럴 (0) | 2021.06.08 |
C ++에서 extern을 사용하는 경우 (0) | 2021.06.04 |