메모리 할당없이 싱글 톤 디자인 패턴을 구현하려고합니다. 나는 해결책을 찾고자했지만 모든 해결책이 메모리 할당으로 정의 된 싱글 톤을위한 것 같았다.C++ Singleton :`정의되지 않은 참조 '오류
나는 생성자는 비공개 내가 헤더 파일에 추가 된 코드 만이 싱글 톤 디자인 패턴이었다 만들기 위해 :
static ParametersServerPC& ParametersServerPC::GetInstance() {
static ParametersServerPC instance;
return instance;
}
이 빈 생성자가 기본 클래스 ParametersServerABS
에서 파생 클래스입니다 정의. ParametersServerABS
은 추상 클래스입니다.
내가 별도의 파일에 ParametersServerPC
클래스를 인스턴스화하려고
parameters_server_abs : 여기
undefined reference to `ParametersServerPC::GetInstance()'
가
.cpp
및
.hpp
파일입니다
ParametersServerPC& paramServer = ParametersServerPC::GetInstance();
나는이 오류가 발생합니다. hpp :
parameters_server_abs.cpp :
#include "mid_level/parameters_server_abs.hpp"
ParametersServerABS::ParametersServerABS() {}
ParametersServerABS::~ParametersServerABS() {}
parameters_server_pc.hpp :
#ifndef PARAMETERS_SERVER_PC_HPP_
#define PARAMETERS_SERVER_PC_HPP_
#include <string>
#include "mid_level/parameters_server_abs.hpp"
class ParametersServerPC: public ParametersServerABS {
public:
~ParametersServerPC();
static ParametersServerPC& GetInstance();
virtual bool Load();
private:
ParametersServerPC(std::string parameterFileName = "parameters.txt");
std::string _parameterFileName;
};
parameters_server_pc.cpp :
#include "mid_level/parameters_server_pc.hpp"
ParametersServerPC::ParametersServerPC(std::string parameterFileName = "parameters.txt") :
_parameterFileName(parameterFileName) {
}
ParametersServerPC::~ParametersServerPC() {
}
static ParametersServerPC& ParametersServerPC::GetInstance() {
static ParametersServerPC instance;
return instance;
}
virtual bool ParametersServerPC::Load() {
return true; // TODO
}
my_test_file.cpp
#include "mid_level/parameters_server_pc.hpp"
ParametersServerPC& paramServer = ParametersServerPC::GetInstance();
,174,
'ParametersServerPC'의 모든 코드를 게시 할 수 있습니까? 'GetInstance()'는 괜찮아 보이지만 정의에는'static'이 필요 없습니다. –
'ParametersServerABS'는'PC' 클래스가 파생 된 추상 클래스입니다. 그것은 단지 public 생성자와 소멸자를 가지고 있습니다. 내가 아직 정의하지 않은 가상 함수와 함께. 'PC' 클래스의 GetInstance() 코드는 헤더 파일에 있습니다. 지금 가지고있는 것은 모두 소멸자와 개인 생성자입니다. –
@VictorPolevoy 잠깐. –