错误与'operator='不匹配(操作数类型为 'Person' 和"Person*")

Error no match for 'operator=' (operand types are 'Person' and 'Person*')

本文关键字:Person 类型 operator 不匹配 错误 操作数      更新时间:2023-10-16
In function 'int main()':
41  14      [Error] no match for 'operator=' (operand types are 'Person' and 'Person*')
41  14      [Note] candidate is:
8   8       [Note] Person& Person::operator=(const Person&)
8   8       [Note] no known conversion for argument 1 from 'Person*' to 'const Person&'
28          recipe for target 'main112.o' failed

作业:

编写一个处理乘客信息的程序。信息包括:1( 乘客的全名。2( 航班号。3( 行李重量该程序应允许用户:1(从键盘读取数据并显示它。2(计算行李重量超过10公斤的乘客人数

#include <string>
#include <iostream>
#include <windows.h>
#include <stdlib.h>
using namespace std;
struct Person
{
    string name;
    string race;
    int weight;
    void write();
    void show();
    void check();
};
void Person::show()
{
    cout<<"ÔÈÎ: "<<name<<endl;
    cout<<"Íîìåð ðåéñà: "<<race<<endl;
    cout<<"Âåñ áàãàæà: "<<weight<<endl;
}
void Person::write()
{
    cout<<"Ââåäèòå ÔÈÎ: ";
    getline(cin,name);
    cout<<"Ââåäèòå íîìåð ðåéñà: ";
    getline(cin,race);
    cout<<"Ââåäèòå âåñ áàãàæà: ";
    cin>>weight;
}
int main()
{
    Person* persons=new Person[4];
    for (int i = 0; i < 4; i++)
    {
        persons[i] = new Person();
        persons[i].write();
    }
    for (int i = 0; i < 4; i++)
    {
        persons[i].show();
    }
    cout<<"Ñ áàãàæîì áîëüøå 10 êã: ";//<<counter<<" ÷åëîâåê"<<endl;
    return 0;
}

当你调用此行时:

Person* persons = new Person[4];

那么这已经是四个人了。您不需要以下行:

persons[i] = new Person();

只需删除此行即可。它返回一个不能分配给persons[i]Person*,它指的是一个实际的Person(而不是指针(。但是既然你已经在第一行做了四个人,你根本不需要这条线。

但是,您应该在完成后删除人员:

delete[] persons;