2017-08-18 6 views
0
// Task.h 
class Task 
{ 
public: 
    Task() = default; 
    Task(const Task &) = delete; 
    ~Task() = default; 
    Task(Task &&) = default; 
    const Task & operator= (const Task &) = default; 
}; 


/main.cpp 
#include <iostream> 
#include "Task.h" 

int main() 
{ 
    Task t; 
    std::cout<<"hello world"<<std::endl; 
    return 0; 
} 

私はMac OSでC++をコーディングしています。私は上記のコードをコンパイルすると:私は全く理解していない
明示的にデフォルトのコピー代入演算子はMyClassを返す必要があります&

error: explicitly-defaulted copy assignment operator must return 'Task &'

g++ main.cpp次のように、私はエラーを取得します。 operator=ここで非const参照のみを返すことができますか?私はWindowsで同じコードを実行し、エラーなしで動作しました。 Mac OSには特別なC++標準がありますか?

+1

[なぜ演算子=参照を参照しないconst参照](https://stackoverflow.com/questions/2969387/why-operator-returns-reference-not-const-reference) – dlmeetei

+0

@dlmeetei私はしません非参照の利点を知る必要があります。なぜ私はエラーが発生したのか知る必要があります。私はWindowsで同じコードを実行したので、とてもうまく動作します。 – Yves

+0

'const'を削除して、それがうまくいけば、なぜか今のところ言うことはできません。 –

答えて

0

問題は私が= defaultを使用していることです。
http://en.cppreference.com/w/cpp/language/copy_assignment

を使用する場合、戻り値の型は非const参照でなければなりません。一方、コードがconst Task & operator= (const Task &t){}の場合、エラーなく動作します。

+0

'constタスク&演算子=(constタスク&t){}'は無効です。 – Jarod42

+0

@ Jarod42笑ってくれて... – Yves

関連する問題