이 항목에 대한 답변이 많지만 여전히 문제가 있습니다.정적 속성을 호출 할 때 "확인되지 않은 외부"가 표시되는 이유는 무엇입니까? Visual C++
모두처럼, 싱글 톤 패턴을 구현하고 싶습니다. 나는이 시도했다 : 나는 의 getInstance() 정적 방법에서 * self_inst의 * 호출 할 때
class Factory
{
private:
Factory(void);
static Factory* self_inst;
public:
~Factory(void);
IPortIO* getStrategy(int portType);
static Factory *getInstance()
{
if(self_inst == NULL)
self_inst = new Factory();
return self_inst;
}
};
문제가 온다. 많은 사람들은 정적 변수를 사용할 때 선언 할뿐만 아니라 다른 곳에서 정의해야한다고 말했습니다. 값으로, 클래스 외부
Factory* Factory::self_inst;
: 2 : 클래스 밖에서
1 : 글쎄, 난 아주 장소에 정의하려고 문제를했습니다
Factory* Factory::self_inst=NULL;
3 정적 내부 방법
static Factory *getInstance()
{
Factory* Factory::self_inst;
if(self_inst == NULL)
self_inst = new Factory();
return self_inst;
}
(4) 및 내부 고정 방법이지만 값 :
static Factory *getInstance()
{
Factory* Factory::self_inst=NULL;
if(self_inst == NULL)
self_inst = new Factory();
return self_inst;
}
아무 것도 작동하지 않습니다! 마지막으로 클래스에 정적 속성을 만들지 않기로 결정했지만 정적 메서드 내부에 정적 변수를 만들지 않기로 결정했습니다. 이 방법은 똑같지 만 좋은 프로그래밍 방법은 아닙니다. 두 가지 정적 메서드를 사용하여 같은 변수에 액세스해야한다면 어떻게해야합니까? 그건 내 사건이 아니지만, 좋은 질문이고, 누군가가 그 일을 할 수 있는지 잘 아는 지 알고 싶습니다.
팩토리 기능을 구현하는 .cpp에서이를 정의 할 수 있어야합니다. .cpp 파일에'Factory * Factory :: self_inst = NULL;'을 넣을 때 에러 메시지가 나옵니까? – JBL
코드의 예는 [compileable] (http://coliru.stacked-crooked.com/view?id=7cef44ef9edf8b212f3ef17fcb4fba27-7063104e283ed82d51a6fde7370c6e59)입니다. 정적 멤버는 CPP 파일 –
에서 초기화되어야합니다. 또한 C++ 11을 사용하는 경우 NULL 매크로 대신에'null_ptr'을 사용해야합니다. – JBL