c++新手求指引 “student”: 没有合适的默认构造函数可用and项不会计算为接受 8 个参数的函数

#include <iostream>
#include <string>
using namespace std;
class student
{
private:
int num;
string name;
string sex;
string age;
int grade;
int classes;
string yuanxi;
string zhuanye;

public:
student(int num1,string name1,string sex1,string age1,int grade1,int classes1,string yuanxi1,string zhuanye1)
{
num=num1;
name=name1;
sex=sex1;
age=age1;
grade=grade1;
classes=classes1;
yuanxi=yuanxi1;
zhuanye=zhuanye1;
}
void show()
{
cout<<"\n学号:"<<num;
cout<<"\n姓名:"<<name;
cout<<"\n性别:"<<sex;
cout<<"\n出生日期:"<<age;
cout<<"\n年级:"<<grade;
cout<<"\n班级:"<<classes;
cout<<"\n院系:"<<yuanxi;
cout<<"\n专业:"<<zhuanye;
}
};

int main()
{
student stu[99];
int menu,n=0,a,m;
int num1;
string name1;
string sex1;
string age1;
int grade1;
int classes1;
string yuanxi1;
string zhuanye1;
cout<<"1.输入学生信息"<<"\n";
cout<<"2.修改学生信息"<<"\n";
cout<<"3.显示学生信息"<<"\n";
while(scanf_s("%d",&menu)==1)
{
switch(menu)
{
case'1':
cout<<"请输入您要添加的学生信息\n学号**姓名**性别***出生日期**年级**班级***院系**专业\n";
cin>>num1>>name1>>sex1>>age1>>grade1>>classes1>>yuanxi1>>zhuanye1;
stu[n](num1,name1,sex1,age1,grade1,classes1,yuanxi1,zhuanye1);
n++;
break;
case'2':
cout<<"请输入您要修改的学生序号";
cin>>a;

cout<<"请输入您要修改的学生信息\n学号**姓名**性别***出生日期**年级**班级***院系**专业\n";
stu[a](num1,name1,sex1,age1,grade1,classes1,yuanxi1,zhuanye1);
break;
case'3':
cout<<"请输入您要查看的学生序号";
cin>>m;
stu[m].show();
break;
}
cout<<"1.输入学生信息"<<"\n";
cout<<"2.修改学生信息"<<"\n";
cout<<"3.显示学生信息"<<"\n";
cin>>menu;

}
return 0;
}

int main()
{
student stu[99];
int menu,a,m;//a>=0&&a<8,m>=0&&m<8;
int num1;
string name1;
string sex1;
string age1;
int grade1;
int classes1;
string yuanxi1;
string zhuanye1;
cout<<"1.输入学生信息"<<"\n";
cout<<"2.修改学生信息"<<"\n";
cout<<"3.显示学生信息"<<"\n";
//while(scanf_s("%d",&menu)==1)此循环无用
while(1){ //会一直循环下去,当然也可以有结束条件
cin>>menu
switch(menu)
{
case'1':
cout<<"请输入您要添加的学生信息\n学号**姓名**性别***出生日期**年级**班级***院系**专业\n";
for(int n=0;n<8;n++){
cin>>num1>>name1>>sex1>>age1>>grade1>>classes1>>yuanxi1>>zhuanye1;
stu[n](num1,name1,sex1,age1,grade1,classes1,yuanxi1,zhuanye1);
}//输入8个学生信息
break;
case'2':
cout<<"请输入您要修改的学生序号";
cin>>a;
cout<<"请输入您要修改的学生信息\n学号**姓名**性别***出生日期**年级**班级***院系**专业\n";
cin>>num1>>name1>>sex1>>age1>>grade1>>classes1>>yuanxi1>>zhuanye1;
stu[a](num1,name1,sex1,age1,grade1,classes1,yuanxi1,zhuanye1);//覆盖stu[a]的数据
stu[a].show;//显示已修改的学生信息。
break;
case'3':
cout<<"请输入您要查看的学生序号";
cin>>m;
stu[m].show();
break;
default: break;//switch函数须有default
}

}
return 0;
}追问

谢谢!但是还是有问题,

引用构造函数的时候总是***项不会计算为接受 8 个参数的函数***
stu[a](num1,name1,sex1,age1,grade1,classes1,yuanxi1,zhuanye1);这句

还有定义对象数组的时候*****没有合适的默认构造函数可用
student stu[99];

追答

student stu= new stu(num1,name1,sex1,age1,grade1,classes1,yuanxi1,zhuanye1);//构造函数是不能直接引用的,即根据参数自动调用,不好意思,弄错了。我没有这样用过类,以下改动你再试试。如果还不行,我再弄。
int main()
{
int num1;
string name1;
string sex1;
string age1;
int grade1;
int classes1;
string yuanxi1;
string zhuanye1;
student stu[8]=new stu(num1,name1,sex1,age1,grade1,classes1,yuanxi1,zhuanye1);
int menu,a,m;//a>=0&&a=0&&m>menu
switch(menu)
{
case'1':
cout>num1>>name1>>sex1>>age1>>grade1>>classes1>>yuanxi1>>zhuanye1;
stu[n].show();
} //输入8个学生信息
break;
case'2':
cout>a;
cout>num1>>name1>>sex1>>age1>>grade1>>classes1>>yuanxi1>>zhuanye1;
stu[a].show;//显示已修改的学生信息。
break;
case'3':
cout>m;
stu[m].show();
break;
default: break;//switch函数须有default
}

}
return 0;
}

追问

问题还是集中在这里,,
student stu[8]=new stu(num1,name1,sex1,age1,grade1,classes1,yuanxi1,zhuanye1);

1. 语法错误 : 标识符“stu”
2.“student”: 没有合适的默认构造函数可用

追答

你说的合适的默认构造函数是有什么作用?

追问

我又定义了一个没有参数的构造函数,现在没有这个问题了
现在只有student stu[8]=new stu(num1,name1,sex1,age1,grade1,classes1,yuanxi1,zhuanye1);

语法错误 : 标识符“stu”

追答

哦,写错了。应该是
student stu[8]=new student[](num1,name1,sex1,age1,grade1,classes1,yuanxi1,zhuanye1);。对了,你能把你改的程序给我看看吗?我没有运行c++的软件,总觉得有地方错误但没提示。

追问

“Target of operator new()”: 数组初始化需要大括号
“stu”: 数组初始化需要大括号

还是这句,太长了,我重新提个问题……

温馨提示:答案为网友推荐,仅供参考