A.hpp:コンストラクタでstd :: unique_ptrを初期化するには?
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*)’
誰もこれが発生している理由として、任意の洞察力を持っています?私はこれを動作させるには多くの異なる方法を試しましたが、役に立たないものです。
A:A(std::string filename)
: file(new std::ifstream(filename.c_str())
{
}
あなたは、コンストラクタで、いくつかのチェックを行う必要がある場合代わりに 'unique_ptr'を割り当てることがfile''の 'リセット()'関数を呼び出します予め。 – gigaplex
必ずしもメンバー初期化リストを使用する必要はありません。しかし、より好ましい。 – JohnJohn
@JohnJohn、Pimplを使用している場合は、std :: unique_ptrがconstなので、member-initializerリストを使用する必要があります。 – csguth