2014-11-20 2 views
0

저는 여기 C++ 초보자입니다. 나는 뭔가를 구현하려고합니다. 내 목표는 간단합니다 :사전이있는 공유 인스턴스 (C++)

  1. 다른 범위에서 쉽게 액세스 할 수있는 공유 인스턴스입니다.
  2. 이 공유 인스턴스에는 키 - 값 쌍 데이터를 저장하기위한 사전 인스턴스 변수 (map)가 있습니다.
  3. 새 키 - 값 쌍을 추가하거나 공용 접근자를 통해 키 값을 가져올 수 있습니다.

    // .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 
}; 

이 변경 제기 이상의 오류 :

  1. 필드'Person'타입이 불완전합니다 : 클래스 선언 Person을 클래스 선언 Company 위로 이동하여이 문제를 해결할 수 있습니다.
  2. 다른 오류 (정의되지 않은 템플릿의 암시 적 인스턴스화 '표준 : __ 1 :: basic_string, 표준 : __ 1 : 할당>') 전에 그러나 다른 장소에 소개 된 같은 메시지입니다. 은 C++ 파일 utility LLVM

    template <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" {...} 블록에 포함되는 것을 언급하는 것을 잊었다.

+0

* "나는 싱글 톤 패턴을 사용하려하지만 컴파일 오류가 많이 발생합니다."* 게시 한 코드는 링크 한 질문에 제공된 싱글 튼 패턴을 사용하려고하지 않습니다. 현재 코드가 싱글 톤을 시도하고있는 곳은 어디입니까? –

답변

0

코드가 괜찮습니다.

헤더 파일에 과 map을 포함 시켰습니까? 그렇다면 컴파일 error's도 제공하십시오.

+0

답장을 보내 주셔서 감사합니다. 내 질문에 업데이트를 추가합니다. –

관련 문제