And*_*y E 10 c++ inheritance fstream class
我正在使用一些HID设备,所有这些设备都有从以下基类派生的类(在main.h中):
class HIDDevice {
public:
hid_device *device;
virtual void read(std::fstream)=0;
virtual void write(std::fstream)=0;
};
Run Code Online (Sandbox Code Playgroud)
这是从它派生的设备类之一(device.h):
class MyDevice : public HIDDevice {
public:
void read(std::fstream);
void write(std::fstream);
};
Run Code Online (Sandbox Code Playgroud)
......以及实施的样本:
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());
}
Run Code Online (Sandbox Code Playgroud)
......和来电者:
fstream file (filename, ios::binary | ios::in);
dev->read(file);
Run Code Online (Sandbox Code Playgroud)
当我尝试编译时,我收到以下错误:
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:错误:'std :: basic_fstream :: basic_fstream(const std :: basic_fstream&)'被隐式删除,因为默认定义不正确:
......我不知道为什么,可能是因为我对C++很新,我做了一些愚蠢的事情.
将参数更改回引用(使用&),我收到以下错误:
/main.o:(.rodata._ZTV13MyDevice[vtable for MyDevice] + 0x18):未定义的引用`MyDevice :: write(std :: basic_fstream>&)'
任何人都可以帮我解决这个问题吗?
Who*_*aig 20
尝试std::fstream通过引用折腾这些.
class MyDevice : public HIDDevice {
public:
void read(std::fstream&);
void write(std::fstream&);
};
Run Code Online (Sandbox Code Playgroud)
小智 5
仅供参考,我遇到了相同的编译器错误,但以不同的方式创建了该错误,这对我来说并不是立即显而易见的。我出于习惯写了:
auto stream = fstream(output, iOS::out | iOS::binary);
Run Code Online (Sandbox Code Playgroud)
当然,这会创建一个临时的fstream对象并将其复制到流中。使用clang在Xcode 6中有效,但不适用于GCC 4.9.2。
| 归档时间: |
|
| 查看次数: |
21026 次 |
| 最近记录: |