Pourquoi mon fstream être supprimés de manière implicite?

Je travaille avec quelques périphériques HID, qui ont tous des classes dérivant de la suite de la classe de base (en principal.h):

class HIDDevice {
    public:
        hid_device *device;

        virtual void read(std::fstream)=0;
        virtual void write(std::fstream)=0;
};

Voici un appareil de classes qui en dérivent (appareil.h):

class MyDevice : public HIDDevice {
    public:
        void read(std::fstream);
        void write(std::fstream);
};

...et un exemple de mise en œuvre:

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());
}

...et l'appelant:

fstream file (filename, ios::binary | ios::in);
dev->read(file);

Quand j'essaie de le compiler, j'obtiens l'erreur suivante:

principal.rpc:294:27: erreur: l'utilisation de supprimé la fonction ‘std::basic_fstream::basic_fstream(const std::basic_fstream&)’
Dans le fichier inclus à partir de la source principale.rpc:24:0:
/usr/include/c++/4.6/fstream:761:11: erreur: ‘std::basic_fstream::basic_fstream(const std::basic_fstream&)’ est implicitement supprimé parce que la définition par défaut serait mal formé:

... et je n'ai aucune idée pourquoi, sans doute parce que je suis assez novice en C++ et j'ai fait quelque chose d'idiot.

Changer les arguments retour aux références (à l'aide de &), j'obtiens l'erreur suivante:

/main.o:(.rodata._ZTV13MyDevice[vtable pour mon périphérique]+0x18): undefined reference to `MyDevice::write(std::basic_fstream >&)'

Quelqu'un peut-il m'aider à résoudre ce problème?

En passant, je ne suis pas sûr de la façon de les corriger, mais la question du titre est mauvais: ce n'est pas les objets de flux qui sont supprimés, "implicitement supprimé" fait référence aux implicites version de ceci.
peut-être que nous devrions le laisser comme cela est dans le cas où quelqu'un d'autre utilise le même genre de termes de recherche? Ne me demandez pas, cependant, je ne suis pas un expert en C++.
"fermé" plutôt que "supprimé" peut-être? Ou mieux encore, "double-fermé". Entre ça et la question du corps, je pense que votre couvert.

OriginalL'auteur Andy E | 2012-09-14