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*)’
有没有人知道为什么会这样?我已经尝试了许多不同的方法来实现这一点,但无济于事。
答案 0 :(得分:37)
您需要通过成员初始化列表
初始化它A::A(std::string filename) :
file(new std::ifstream(filename));
{ }
您的示例是尝试在operator ()
上致电unique_ptr
,这是不可能的。
更新:BTW,C ++ 14有std::make_unique
:
A::A(std::string filename) :
file(std::make_unique<std::ifstream>(filename));
{ }
答案 1 :(得分:5)
你可以这样做:
A:A(std::string filename)
: file(new std::ifstream(filename.c_str())
{
}