【发布时间】:2012-09-08 02:47:43
【问题描述】:
我正在使用一些 HID 设备,所有这些设备都有派生自以下基类的类(在 main.h 中):
class HIDDevice {
public:
hid_device *device;
virtual void read(std::fstream)=0;
virtual void write(std::fstream)=0;
};
这是从它派生的设备类之一(device.h):
class MyDevice : public HIDDevice {
public:
void read(std::fstream);
void write(std::fstream);
};
...以及实现示例:
void MyDevice::read(std::fstream file) {
// Read from card and write to file
response = send_command(READ_DEVICE);
file.write((char *)&response[0], response.size());
}
...和调用者:
fstream file (filename, ios::binary | ios::in);
dev->read(file);
当我尝试编译时,我收到以下错误:
main.cpp:294:27:错误:使用已删除的函数‘std::basic_fstream::basic_fstream(const std::basic_fstream&)’
在 source/main.cpp:24:0 包含的文件中: /usr/include/c++/4.6/fstream:761:11: error: ‘std::basic_fstream::basic_fstream(const std::basic_fstream&)’ 被隐式删除,因为默认定义格式不正确:
...我不知道为什么,可能是因为我对 C++ 还很陌生,而且我做了一些愚蠢的事情。
将参数改回引用(使用 &),我收到以下错误:
/main.o:(.rodata._ZTV13MyDevice[vtable for MyDevice]+0x18): undefined reference to `MyDevice::write(std::basic_fstream >&)'
谁能帮我解决这个问题?
【问题讨论】:
-
顺便说一句,我不知道如何更正它,但问题标题很糟糕:它不是被删除的流对象,“隐式删除”是指this的隐式版本.
-
@Jon:也许我们应该保持原样,以防其他人使用类似的搜索词?不过别问我,我几乎不是 C++ 专家。
-
“关闭”而不是“删除”?甚至更好; “双关”。在这和我认为你的问题主体之间。
标签: c++ class inheritance fstream