gpt4 book ai didi

c++ - 在面向对象编程中分配新内存时处理代码中不同构造函数导致的错误

转载 作者:行者123 更新时间:2023-12-04 12:32:21 25 4
gpt4 key购买 nike

我想为我的类分配新的内存,它也有一些派生类。因为我已经定义了类型为 Professor(string name,int age,int publications,int cur_id) 内存分配的构造函数per[i] = new Professor; 主要抛出错误:没有匹配函数调用 'Professor::Professor()。我得到的另一个错误是 candidate: 'Professor::Professor(std::string, int, int, int) 需要 4 个参数,提供 0 个。请帮助我如何定义一个构造函数来分配内存而不给出任何错误,谢谢。

ps:我正在尝试解决this question

我类的一部分看起来像;

class Person{
protected:
string name;
int age;
public:
Person(string name,int age){
name=name;
age=age;
}
int z=0;
void getdata(){
string m;int n;
cin>>m>>n;
z++;
Person(m,n);
}
void putdata(){
cout<<name<<" "<<age<<endl;
}
};
class Professor: public Person{
public:
int publications;
int cur_id;
Professor(string name,int age,int publications,int cur_id)
:Person(name,age)
{
publications=publications;
cur_id=cur_id;
}
int b=0;
void getdata(){
string a;int b,c;
cin>>a>>b>>c;
b++;
Professor(a,b,c,b);
}
void putdata(){
cout<<name<<" "<<age<<" "<<publications<<" "<<cur_id<<endl;
}
};
class Student:public Person{
public:
int marks[6];
int cur_id;
Student(string name,int age,int arr[6],int cur_id)
:Person(name,age)
{
marks[6]=arr[6];
cur_id=cur_id;
}
int s=0;
void getdata(){
string p;int q;int r[6];
cin>>p>>q;
for(int i=0;i<6;i++){
cin>>r[i];
}
s++;
Student(p,q,r,s);
}
void putdata(){
cout<<name<<" "<<age<<" "<<marks[0]<<" "<<marks[1]<<" "<<marks[2]<<" "<<marks[3]<<" "<<marks[4]<<" "<<marks[5]<<" "<<cur_id<<endl;
}

};

我的主要功能看起来像

int main(){

int n, val;
cin>>n; //The number of objects that is going to be created.
Person *per[n];

for(int i = 0;i < n;i++){

cin>>val;
if(val == 1){
// If val is 1 current object is of type Professor
per[i] = new Professor;

}
else per[i] = new Student; // Else the current object is of type Student

per[i]->getdata(); // Get the data from the user.
}

for(int i=0;i<n;i++)
per[i]->putdata(); // Print the required output for each object.

return 0;
}

最佳答案

您的问题与动态分配无关。您正在尝试通过调用默认构造函数 (new Professor/new Student) 来构造 ProfessorStudent ,但它们没有默认构造函数。

默认构造函数是可以不带参数调用的构造函数。您可以更改现有的构造函数:

 Person(string name = "",int age = 42) : name(name), age(age) {}

Student 也类似。请注意,您的构造函数实现是错误的。您将参数分配给它们自己但没有初始化成员。成员初始化列表是一个特殊的地方,您可以在其中为成员和参数使用相同的名称而不会出现阴影。

或者调用带参数的构造函数。

关于c++ - 在面向对象编程中分配新内存时处理代码中不同构造函数导致的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68019237/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com