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()));
}
私が得るエラーがスローされます:
A.cpp:7:43: error: no match for call to ‘(std::unique_ptr<std::basic_ifstream<char> >) (std::ifstream*)’
なぜこれが起こっているのかについての洞察はありますか?これを機能させるためにさまざまな方法を試しましたが、役に立ちませんでした。
member-initializer listで初期化する必要があります:
_A::A(std::string filename) :
file(new std::ifstream(filename));
{ }
_
あなたの例は_unique_ptr
_でoperator ()
を呼び出そうとしましたが、これは不可能です。
更新:ところで、C++ 14には _std::make_unique
_ :
_A::A(std::string filename) :
file(std::make_unique<std::ifstream>(filename));
{ }
_
次のようにできます:
A:A(std::string filename)
: file(new std::ifstream(filename.c_str())
{
}