-1

コンストラクターを初期化しようとしたときに、いくつかの奇妙なエラーに気付きました。見せるだけなら簡単です。

#include <iostream>


class MyClass {

public:

    int var1, var2, var3;

    MyClass() {

        var1, var2, var3 = 0;

    }

    MyClass(int one, int two, int three) {

        var1 = one;
        var2 = two;
        var3 = three;
    }

};


int main()
{
    MyClass object1(5, 6, 7);
    std::cout << object1.var1; // This works

    MyClass object2();
    std::cout << object2.var1; //Error object must have class type.

    MyClass object3 = MyClass();
    std::cout << object3.var1; //Now it works for some reason

    delete &object1;
    MyClass ojbect1(5, 6, 7); //error redefinition; multiple initialization
}

ご覧のとおり、何らかの理由で object2 を初期化すると、object3 と同様に、構文が MyClass object3 = MyClass(); のように記述されていない限り、値が出力されません。

さらに、object1 を削除するときは & 演算子を使用する必要があります。これは、アンパサンドを使用しない C++ でオブジェクトを削除するこの質問で考えたことに驚きました 。

最後に、myobject を再初期化しようとすると、コンパイラは複数の定義があると文句を言います。MyClass キーワードを除外しようとしましたが、それでも許可されません。

これで、さまざまな回避策を使用して、プログラムに必要なことを実行させることができますが、ここに書いた方法でこれらのことを実行できない理由がわかりません。

4

2 に答える 2