4
在下面的代碼中,是避免編譯錯誤幷包含Bh的唯一方法,它在A.cpp中手動實現移動構造函數/賦值?「使用未定義類型」和unique_ptr轉發已聲明的類和默認的移動構造函數/賦值
// A.h
#include <memory>
class B; // implementation somewhere in B.h/B.cpp
class A
{
public:
A() = default;
~A() = default;
A(const A&) = delete;
A& operator=(const A&) = delete;
A(A&&) = default;
A& operator=(A&&) = default;
private:
std::unique_ptr<B> m_b;
};
的Visual Studio 2015年提供了「錯誤C2027:使用未定義的類型」,因爲的std ::的unique_ptr呼籲M_B的缺失者的移動構造函數/賦值運算符(在試圖調用B的析構函數),這顯然是不在這一點上已知。
相關/ dup:http://stackoverflow.com/questions/13414652/forward-declaration-with-unique-ptr – NathanOliver
我其實也不知道你也可以在.cpp中默認。我認爲這是需要申報的。因此,處理我的具體情況的正確方法就是將移動構造器聲明爲A(A &&)noexcept;在A.h中並將其定義爲A :: A(A &&)noexcept = default;在A.cpp。謝謝! – Robert
這聽起來像個好主意。 – NathanOliver