【发布时间】:2016-10-14 13:08:38
【问题描述】:
我想要一个对象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'
【问题讨论】:
-
您需要发布minimal reproducible example。尽管您的错误似乎很明显,而且很常见,但如果没有minimal reproducible example,则无法确认。
-
请查看URL,这将有助于提高您的内容质量
-
恕我直言,您的问题既好又有趣,但复制粘贴编译器错误消息 fast 以满足每个人的要求,避免重新打开轮次。
-
在标准 C++ 中,您不能让一个类包含自身的映射(静态或非静态)。另一种方法是在实现此类的
.cpp文件中将map设为静态变量 -
@peterh 是的,我也看不出有什么问题。特别是因为标题是导致问题的原因,而不是实现。尽管如此,当它被搁置时我正在睡觉。哦,好吧
标签: c++ constructor static private encapsulation