C++ 使用类对象时出错?

C++ 使用类对象时出错?,c++,class,constructor,C++,Class,Constructor,我刚刚创建了一个person类并定义了2个重载构造函数,如您所见 然后制作了一个2个对象的数组,但是出现了一些错误 为什么我会犯这两个错误?? 那么[-fpermissive]错误是什么 #include <iostream> using namespace std; class person { int x; public: person() { x=0; } person(int y){ //error x=y

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

你没有发布错误,但我想是的

: 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]
你有两个选择。首先,创建一个person指针数组,这些指针指向使用新关键字创建并驻留在堆上的person对象

person* Arr[2];
Arr[0]=new person(n);
您还可以创建一个人员数组,然后将其设置为与另一个人相等,这不需要使用new关键字。这些将驻留在堆栈上

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

你没有发布错误,但我想是的

: 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]
你有两个选择。首先,创建一个person指针数组,这些指针指向使用新关键字创建并驻留在堆上的person对象

person* Arr[2];
Arr[0]=new person(n);
您还可以创建一个人员数组,然后将其设置为与另一个人相等,这不需要使用new关键字。这些将驻留在堆栈上

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

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

int main()
{
    int n;

    cin>>n;

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

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

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

int main()
{
    int n;

    cin>>n;

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

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

有两个以上的选择。事实上,第一种选择绝对不好。如果需要动态数组,那么正确的解决方案是std::vector。@BenjaminLindley除非您只需要顺序访问,否则std::list会更好。@Code Guru:即使有这种混淆[deleted],我也不同意只需要顺序访问就足以作为选择list而不是vector的理由。选择列表需要一个非常特殊的原因,vector没有提供的一些优势,我可以选择只按顺序访问一个vector,并且您需要确保vector自身的优势不会抵消这个优势。@BenjaminLindley当然。我想当我做出如此鲁莽的评论时,我需要更加清楚。这是我反复指出的,在选择一个正确的解决方案时需要考虑这些因素,而这个解决方案可能仍然不是唯一正确的解决方案。@Code Guru,Benjamin我认为在向量上选择一个列表的唯一时间是当您需要添加/删除元素而不使迭代器失效时。至于只有顺序访问向量肯定会更好,因为它在缓存方面表现得更好。事实上,第一种选择绝对不好。如果需要动态数组,那么正确的解决方案是std::vector。@BenjaminLindley除非您只需要顺序访问,否则std::list会更好。@Code Guru:即使有这种混淆[deleted],我也不同意只需要顺序访问就足以作为选择list而不是vector的理由。选择列表需要一个非常特殊的原因,vector没有提供的一些优势,我可以选择只按顺序访问一个vector,并且您需要确保vector自身的优势不会抵消这个优势。@BenjaminLindley当然。我想当我做出如此鲁莽的评论时,我需要更加清楚。这是我反复指出的,在选择一个正确的解决方案时需要考虑这些因素,而这个解决方案可能仍然不是唯一正确的解决方案。@Code Guru,Benjamin我认为在向量上选择一个列表的唯一时间是当您需要添加/删除元素而不使迭代器失效时。至于只有顺序访问向量肯定也会更好,因为它在缓存方面表现得更好。