C++ 클래스에서 static 멤버변수를 초기화하는 방법을 다룹니다.
아직 C++에 익숙하지 못해서 제 맘대로 바꿔보면서 감을 익히는 중입니다.
2020. 9. 1. 최초작성
클래스에 static 변수를 추가하여 클래스를 이용하여 만들어진 모든 인스턴스가
static 변수를 공유하도록 만들고 싶었습니다.
모든 인스턴스가 같은 값을 가지는 멤버변수를 가지도록 하려는 겁니다.
클래스 A에 static 멤버변수 name을 추가했습니다.
테스트 편의상 public으로 선언했습니다.
A.h
그리고 테스트에 사용할 새로운 파일을 만들어 static 변수를 초기화를 해보았습니다.
인스턴스를 선언하지 않고 다음처럼 직접 해당 멤버변수에 값을 넣었습니다.
main.cpp
컴파일 해보니 다음과 같은 에러가 납니다.
클래스 A에 name이 분명히 선언되어 있는데 클래스 A에서 변수 name을 못찾네요.
main.cpp:(.rdata$.refptr._ZN1A4nameB5cxx11E[.refptr._ZN1A4nameB5cxx11E]+0x0): undefined
reference to `A::name[abi:cxx11]'
collect2.exe: error: ld returned 1 exit status
인스턴스를 생성하여 해도 똑같은 에러가 납니다.
main.cpp
검색해보니 static 멤버변수를 전역에서 초기화해주어야 한다고 합니다.
main.cpp 파일의 전역에서 다음처럼 A클래스의 static 변수 name을 초기화해줍니다.
앞에서 살펴본 두가지 방법 모두 에러가 나지 않습니다.
main.cpp
클래스 A의 static 멤버변수 name을 “hello”로 초기화한 후, 이후 생성되는 클래스 A의 인스턴스 c1, c2, c3의 멤버변수 name 값을 출력해보면 값이 “hello”로 동일한 것을 확인할 수 있습니다.
main.cpp
추가로 두 개의 클래스를 생성하여 한쪽 클래스에서 클래스 A의 static 멤버변수 name의 값을 설정하고
다른 클래스에서 클래스 A의 static 멤버변수 name 을 출력해보았는데 정상적으로 동작합니다.
다른 클래스 내에서 생성되더라도 클래스 A의 static 멤버변수 name을 공유합니다.
'프로그래밍 노트 > C&C++' 카테고리의 다른 글
C++ shared_ptr 예제, 사용방법 (0) | 2021.01.01 |
---|---|
C++ localtime 사용하여 현재 날짜, 시간 출력하기 (Windows/Linux) (0) | 2020.12.11 |
C++ - 터미널의 특정 위치에 문자열 출력하기 (0) | 2020.12.10 |
linux echo server ( pthread 사용 ) (0) | 2015.11.14 |
디렉토리에서 특정 문자열로 시작하는 엔트리 읽어오기 (0) | 2015.01.22 |
시간날때마다 틈틈이 이것저것 해보며 블로그에 글을 남깁니다.
블로그의 문서는 종종 최신 버전으로 업데이트됩니다.
여유 시간이 날때 진행하는 거라 언제 진행될지는 알 수 없습니다.
영화,책, 생각등을 올리는 블로그도 운영하고 있습니다.
https://freewriting2024.tistory.com
제가 쓴 책도 한번 검토해보세요 ^^
그렇게 천천히 걸으면서도 그렇게 빨리 앞으로 나갈 수 있다는 건.
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!