2016-06-14 5 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(); 

}; 

EDIT

エラーメッセージは以下のとおりです。

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 doesnのクラスstd::map<something>の静的メンバーがあるというだけの理由で、クラスのプライベートメンバーに特別なアクセス権を取得できません。

std::mapのメンバーによってコンストラクタとデストラクタが実際に呼び出されるという保証はないため、std::mapを友人として宣言することはできません。このタスクは、内部実装クラスまたはスタンドアロン関数に委譲される可能性があります。

誰かが同じ種類のstd::mapを宣言し、自分のマップにあなたのクラスのオブジェクトを作成できるように、必要な友達を作るために何とかしてもそれはあなたにはあまり効果がありません。

コンストラクタとデストラクタをpublicにすることをお勧めします。

関連する問題