2016-06-14 4 views
0

개체가 있으니 HIDDevice은 정적 인 std::map을 유지합니다.개인 생성자 및 정적 컨테이너 (지도)가있는 객체?

class HIDDevice 
{ 
public: 
    static HIDDevice* getDevice(unsigned short vendorID, unsigned short productID); 

    int writeData(const unsigned char *data, int length); 
    int readData(unsigned char *data, int length); 

private: 
    static std::map<std::string, HIDDevice> m_hidDevices; 
    static bool isInitialized; 
    static void initHIDAPI(); 


    HIDDevice(){}; 
    HIDDevice(unsigned short vendorID, unsigned short productID, std::string serialNumber = ""); 
    HIDDevice(std::string path); 
    ~HIDDevice(); 

}; 

편집

오류 메시지는 다음과 같습니다 :

error C2248: 'HIDDevice::HIDDevice' : cannot access private member declared in class 'HIDDevice'  
+0

무엇이 오류입니까? – P0W

+4

[mcve]를 게시해야합니다. 비록 당신의 실수가 아주 분명하고, 아주 흔하게 보일지라도 [mcve] 없이는 확인할 수 없습니다. –

+0

이 URL을 확인하십시오 (http://stackoverflow.com/help) 콘텐츠 품질을 높이는 것이 유용 할 것입니다 –

답변

1

std::map 아무튼 다음과 같이 그러나, 컴파일 오류의 결과 아래의 클래스 생성자와 소멸자는 비공개 때 클래스 std::map<something>의 정적 멤버가 있기 때문에 클래스의 비공개 멤버에게 특별한 액세스 권한을 얻지 못합니다.

std::map의 구성원에 의해 생성자와 소멸자가 실제로 호출된다는 보장이 없기 때문에 std::map을 친구로 선언 할 수 없습니다. 이 작업은 내부 구현 클래스 또는 독립 실행 형 함수에 위임 될 수 있습니다.

어떻게 든 필요한 친구를 사귀도록 관리하더라도 많은 사람들이 같은 종류의 std::map을 선언하고 자신의지도에 클래스의 개체를 만들 수 있기 때문에 많은 도움이되지 않습니다.

단지 생성자와 소멸자를 공개하는 것이 좋습니다.