0

以下のコードでコンパイル エラーが発生しますが、コピー コンストラクター ステートメントを削除すると、同じエラーがコンパイルされます。

誰でもこの動作について教えてもらえますか?

class MyClass
{
    private:
        int i;
        MyClass(MyClass &);
    public:
        MyClass():i(0){}
};

int main(){
    MyClass obj = MyClass();
    return 0;
}

エラーは次のとおりです。

MyClass.cpp: In function ‘int main()’: MyClass.cpp:15:24: error: no matching function for call to ‘MyClass::MyClass(MyClass)’ MyClass.cpp:15:24: note: candidates are: MyClass.cpp:11:2: note: MyClass::MyClass(MyClass&) MyClass.cpp:11:2: note: no known conversion for argument 1 from ‘MyClass’ to ‘MyClass&’ MyClass.cpp:10:2: note: MyClass::MyClass() MyClass.cpp:10:2: note: candidate expects 0 arguments, 1 provided 
4

2 に答える 2

3

これは、コピー コンストラクターがプライベートであり、実装していないためです。あなたはそれを公開して実装します。も忘れてしまいconstます。

class MyClass
{ 
private:
    int i;
public:
    MyClass():i(0){}
    MyClass(MyClass const & o){ i = o.i; }
};

int main(){
    MyClass obj = MyClass();
    return 0;
}
于 2013-09-19T23:29:27.747 に答える