저는 여기 C++ 초보자입니다. 나는 뭔가를 구현하려고합니다. 내 목표는 간단합니다 :사전이있는 공유 인스턴스 (C++)
- 다른 범위에서 쉽게 액세스 할 수있는 공유 인스턴스입니다.
- 이 공유 인스턴스에는 키 - 값 쌍 데이터를 저장하기위한 사전 인스턴스 변수 (map)가 있습니다.
- 새 키 - 값 쌍을 추가하거나 공용 접근자를 통해 키 값을 가져올 수 있습니다.
// .h using namespace std; class Person; typedef map<string, Person> DictForPeople; class Company { Company(); void setValueForKey(string key, Person value); Person valueForKey(string key); private: DictForPeople _dictForPeople; }; class Person { public: Person(); void setName(string name); string name(); private: string _name; // !!!: raise error here };
및 구현 (통화 당) :
여기 내 헤더 인 내가 singleton pattern를 사용하기 위해 노력하고있어
// .cpp
Company::Company(){
}
void Company::setValueForKey(string key, Person value){
_dictForPeople[key] = value;
}
Person Company::valueForKey(string key){
return _dictForPeople[key];
}
Person::Person(){
}
void Person::setName(string name){
_name = name;
}
string Person::name(){
return _name;
}
하지만 컴파일 오류가 많이 발생합니다. 문자열 /지도에 대한 접근자를 사용하여 공유 인스턴스를 올바르게 선언하는 방법은 무엇입니까?
UPDATE 1 정의 템플릿 암시 실체화 '표준 : __ 1 :: basic_string, 표준 : __ 1 :: 할당>' : 상기 코드는 오류를 발생
환경은 입니다. Xcode 6/Mac OS X 10.10과 LLVM/Clang. 몇 가지 이유 때문에 Objective-C 대신 C++을 사용하려고합니다.
업데이트 2 :
싱글 패턴과 내 구현은 다음 (reference)입니다 :
// .h
using namespace std;
class Person;
typedef map<string, Person> DictForPeople;
class Company {
static Company& getInstance() { // For Singleton Pattern
static Company instance;
return instance;
}
void setValueForKey(string key, Person value);
Person valueForKey(string key);
private:
Company() {}; // For Singleton Pattern
Company(Company const&); // For Singleton Pattern
void operator=(Company const&); // For Singleton Pattern
DictForPeople _dictForPeople;
};
class Person {
public:
Person();
void setName(string name);
string name();
private:
string _name; // !!!: raise error here
};
이 변경 제기 이상의 오류 :
- 필드'Person'타입이 불완전합니다 : 클래스 선언
Person
을 클래스 선언Company
위로 이동하여이 문제를 해결할 수 있습니다. 다른 오류 (정의되지 않은 템플릿의 암시 적 인스턴스화 '표준 : __ 1 :: basic_string, 표준 : __ 1 : 할당>') 전에 그러나 다른 장소에 소개 된 같은 메시지입니다. 은 C++ 파일
utility
LLVMtemplate <class _T1, class _T2> struct _LIBCPP_TYPE_VIS_ONLY pair { typedef _T1 first_type; typedef _T2 second_type; _T1 first; // <<<-- raise the error here _T2 second; // pair(const pair&) = default; // pair(pair&&) = default; _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR pair() : first(), second() {}
업데이트 3 :
나는 위의 코드는 extern "C" {...}
블록에 포함되는 것을 언급하는 것을 잊었다.
* "나는 싱글 톤 패턴을 사용하려하지만 컴파일 오류가 많이 발생합니다."* 게시 한 코드는 링크 한 질문에 제공된 싱글 튼 패턴을 사용하려고하지 않습니다. 현재 코드가 싱글 톤을 시도하고있는 곳은 어디입니까? –