は、メッセージなぜ私は、コンパイルエラーになっています「削除関数「STDの使用を:: unique_ptrを...」
c:\mingw\include\c++\6.1.0\bits\predefined_ops.h:123:18: error: use of deleted function 'std::unique_ptr<_Tp, _Dp>::unique_ptr(const std::unique_ptr<_Tp, _Dp>&) [with _Tp = Deduction; _Dp = std::default_delete<Deduction>]'
{ return bool(_M_comp(*__it1, *__it2)); }
を持つ巨大なコンパイルエラーを取得しています。
マイコード:
struct Value{
std::string ded_code;
float amount;
Value(std::string code, float amt):ded_code(code), amount(amt){}
};
struct Deduction{
std::string p_number;
std::vector<std::unique_ptr<Value>> values;
Deduction(string pnum, string code, float amt):p_number(pnum){
auto val = std::make_unique<Value>(code, amt);
values.emplace_back(move(val));
}
};
class compute{
public:
vector<unique_ptr<Deduction>> deductions;
void fillDeductions(){
// fill deductions
...
}
};
class CompareDiff{
public:
bool operator()(unique_ptr<Deduction>& ded1, unique_ptr<Deductions>& ded2){
rPtr1 = ded1.get();
rPtr2 = ded2.get();
return (rPtr1->p_number < rPtr2->p_number);
}
};
...
int main(){
...
// fill two deduction vectors
Compute compA = Compute()
compA.fillDeductions()
Compute compB = Compute()
compB.fillDeductions()
vector<unique_ptr<Deduction>> diffs
set_difference(compA.begin(), compA.end(),
compB.begin(), compB.end(),
inserter(diffs, diffs.begin()), CompareDiff());
}
は、Windows 7のマシン上のgcc 6.1.0を使用しています。
私には何が欠けていますか?
よろしくお願いいたします。
あなたは、その削除機能以来unique_ptr
を構築コピーすることはできませんPG
おそらく 'auto rPtr1 = ded1.get()'が必要ですが、それはおそらく無関係です。 – MSalters
@MSaltersおそらく、 'ded1'を生ポインタにまったく変換する必要はありません。通常のポインタのように 'unique_ptr'を使います:' ded1-> p_number'。 –
ドキュメントを読んでください。問題は明らかでした。 –