소프트웨어/c++

Singleton pattern에서 이상한 부분 발견!

개발자_이훈규 2015. 2. 9. 22:06




1. error를 발견했는데.


error가 static으로 선언된 변수를 못찾아서 나오는 문제였습니다.


도통 이유를 알 수 없어서 이리 저리 헤매다가 어느 사이트를 찾았습니다.



근데 이류를 모르겠네요...
private로 선언한 변수를 어떻게 저런 방식으로 사용하지?
어마무시하게 헷갈리네요;;
내일 이유를 어쭤보고 알아봐야겠습니다.



2. error code


undefined reference to `xxx::s_xxxx'



3. 다시 재현해서 기록해보기록 했습니다.



코드는 아래와 같습니다.


Singleton.cpp


Singleton.h


main.cpp






이걸 실행시키면 아래의 에러코드가 쭈루룩 뜹니다.


xxx@xxx:~/Dropbox/cpp/xxx$ g++ main.cpp Singleton.cpp

/tmp/ccJ7akl7.o: In function `Singleton::instance()':

Singleton.cpp:(.text+0xe): undefined reference to `Singleton::s_instance'

Singleton.cpp:(.text+0x2e): undefined reference to `Singleton::s_instance'

Singleton.cpp:(.text+0x33): undefined reference to `Singleton::s_instance'



3-solution. 이 문제의 해법은,


cpp파일에 한줄만 추가하면 됩니다.


Singleton * Singleton::s_instance;


이유는 아직 잘 모르겠지만 이 한줄만 추가해주면 이 문제는 해결됩니다.



출처는 아래와 같습니다.

http://developer.nokia.com/community/discussion/showthread.php/213834-Singleton-implementation-undefined-reference



cf) 수정사항

Singleton * Singleton::s_instance;   을


#include <stdio.h>

Singleton * Singleton::s_instance =  NULL;   으로