1

個人クラスを作成し、2 つのオーバーロードされたコンストラクターを定義したところ、2 つのオブジェクトの配列が作成されましたが、いくつかのエラーが表示されました。

なぜ私はこれらの2つのエラーが発生するのですか?? [-fpermissive] エラーとは何ですか??

#include <iostream>
using namespace std;
class person
{
    int x;

public:
    person() {
        x=0;
    }
    person(int y){   //error
        x=y;
    }
};


int main()
{
    int n;

    cin>>n;

    person* Arr= new person[2];

    Arr[0]=new person(n);  //error
    return 0;
}
4

2 に答える 2

2

2 で構成される配列を割り当ててから、新しく割り当てられたへのポインターをその配列の最初の配列personに格納しようとしました。へのポインターの配列を使用して、コードに最小限の変更を加えます。(これが良いデザインであるかどうかについては触れていません。)personpersonperson

int main()
{
    int n;

    cin>>n;

    person** Arr= new person*[2];

    Arr[0]=new person(n);
    return 0;
}
于 2012-10-08T01:25:10.023 に答える
2

あなたはエラーを投稿していませんが、

: In function ‘int main()’:
:25:24: error: invalid conversion from ‘person*’ to ‘int’ [-fpermissive]
:11:5: error:   initializing argument 1 of ‘person::person(int)’ [-fpermissive]

2 つのオプションがあります。1 つ目は、「new」キーワードを使用して作成し、ヒープ上に存在する人物オブジェクトを指す人物ポインタの配列を作成します。

person* Arr[2];
Arr[0]=new person(n);

また、人物の配列を作成し、それらを別の人物と等しく設定することもできます。これには new キーワードは必要ありません。これらはスタックに常駐します。

person Arr[2];
Arr[0]= person(n);
于 2012-10-08T00:52:07.523 に答える