1

我刚刚创建了一个人类并定义了 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

您没有发布错误,但我认为它们是,

: 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]

你有两个选择。第一,创建一个人员指针数组,这些指针指向您使用“new”关键字创建的人员对象,并且驻留在堆上。

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

您还可以创建一个人员数组,然后将它们设置为等于另一个人,这不需要 new 关键字。这些将驻留在堆栈上。

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

您分配了一个由 2 组成的数组person,然后尝试将指向新分配的指针存储到该数组中person的第一个中。person这是对您的代码的最小更改,使用指向person. (我不是在讨论这是否是好的设计。)

int main()
{
    int n;

    cin>>n;

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

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