A.hpp:
class A {
private:
std::unique_ptr<std::ifstream> file;
public:
A(std::string filename);
};
A.cpp:
A::A(std::string filename) {
this->file(new std::ifstream(filename.c_str()));
}
L'erreur que j'obtiens est levée:
A.cpp:7:43: error: no match for call to ‘(std::unique_ptr<std::basic_ifstream<char> >) (std::ifstream*)’
Quelqu'un at-il une idée de pourquoi cela se produit? J'ai essayé de nombreuses façons différentes pour que cela fonctionne, mais en vain.
Vous devez l'initialiser via la liste membre-initialiseur :
A::A(std::string filename) :
file(new std::ifstream(filename));
{ }
Votre exemple était une tentative d'appeler operator ()
sur un unique_ptr
Ce qui n'est pas possible.
Mise à jour: BTW, C++ 14 a std::make_unique
:
A::A(std::string filename) :
file(std::make_unique<std::ifstream>(filename));
{ }
Vous pouvez le faire comme ceci:
A:A(std::string filename)
: file(new std::ifstream(filename.c_str())
{
}