#include <iostream>
#include <string>
#define num 100
using namespace std;
template <class TNo, class TScore, int coun>
class Student
{
public:
Student() { count = 0; }
void append(TNo sid, TScore sscore);
void deleteStu(TNo sid);
void sort(bool reverse = false);
void displayStudents();
private:
TNo stu_id[num];
TScore stu_score[num];
int count;
};
template <class TNo, class TScore, int count>
void Student<TNo, TScore, count>::append(TNo sid, TScore sscore) {
static int j = 0;
stu_id[j] = sid;
stu_score[j] = sscore;
j++;
count++;
}
template <class TNo, class TScore, int count>
void Student<TNo, TScore, count>::deleteStu(TNo sid) {
int temp;
for (int i = 0; i < count; i++) {
if (stu_id[i] == sid) {
temp = i;
for (int j = temp; j < count - 1; j++) {
stu_id[j] = stu_id[j + 1];
stu_score[j] = stu_score[j + 1];
}
count--;
break;
}
}
}
template <class TNo, class TScore, int count>
void Student<TNo, TScore, count>::sort(bool reverse) {
for (int i = 0; i < count; i++) {
for (int j = 0; j < count - i - 1; j++) {
if ((stu_score[j] > stu_score[j + 1] && !reverse) || (stu_score[j] < stu_score[j + 1] && reverse)) {
swap(stu_id[j], stu_id[j + 1]);
swap(stu_score[j], stu_score[j + 1]);
}
}
}
}
template <class TNo, class TScore, int count>
void Student<TNo, TScore, count>::displayStudents() {
for (int i = 0; i < count; i++) {
cout << stu_id[i] << " " << stu_score[i] << endl;
}
}
int main() {
int i, tn;
string ts;
Student<int, string, 10> stu1;
for (i = 0; i < 4; i++) {
cin >> tn >> ts;
stu1.append(tn, ts);
}
cin >> tn;
stu1.deleteStu(tn);
stu1.sort(true);
Student<int, string, 4> stu2;
for (i = 0; i < 4; i++) {
cin >> tn >> ts;
stu2.append(tn, ts);
}
cin >> tn;
stu2.deleteStu(tn);
stu2.sort();
stu1.displayStudents();
stu2.displayStudents();
return 0;
}
谁懂家人们,就是模板声明中的(本题为count)与类中定义的count发生名称冲突,这个错误在VS、2022中是不报错的,在我们学校的平台就会报错。
在gpt是这么说的:
改正后的代码:
#include <iostream>
#include <string>
using namespace std;
//声明学生模板类【代码补充1/2】
#define num 100
template <class TNo, class TScore, int count>
class Student
{
public:
Student() {count=0;}
void append(TNo sid, TScore sscore); //添加一个学生数据
void deleteStu(TNo sid); //删除指定学号的学生数据
void sort(bool reverse=false); //根据成绩排序,默认升序排序
void displayStudents(); //依次输出学生数据,每个学生数据空格分隔,多个学生数据分行显示
private:
TNo stu_id[num]; //学号,可以为整型,可以为字符串
TScore stu_score[num]; //成绩,可以为整型,可以为字符串
int count; //实际学生数量
};
//实现学生模板类成员函数【代码补充2/2】
template <class TNo, class TScore, int Count>
void Student<TNo, TScore, Count>::append(TNo sid, TScore sscore) {
static int j = 0;
stu_id[j] = sid;
stu_score[j] = sscore;
j++;
count++;
}
template <class TNo, class TScore, int Count>
void Student<TNo, TScore, Count>::deleteStu(TNo sid) {
int temp;
for (int i = 0; i < count; i++) {
if (stu_id[i] == sid) {
temp = i;
for (int j = temp; j <count - 1; j++) {
stu_id[j] = stu_id[j + 1];
stu_score[j] = stu_score[j + 1];
}
count--;
break;
}
}
}
template <class TNo, class TScore, int Count>
void Student<TNo, TScore, Count>::sort(bool reverse) {
for (int i = 0; i < count; i++) {
for (int j = 0; j < count - i - 1; j++) {
if ((stu_score[j] > stu_score[j + 1] && !reverse) || (stu_score[j] < stu_score[j + 1] && reverse)) {
swap(stu_id[j], stu_id[j + 1]);
swap(stu_score[j], stu_score[j + 1]);
}
}
}
}
template <class TNo, class TScore, int Count>
void Student<TNo, TScore, Count>::displayStudents() {
for (int i = 0; i < count; i++) {
cout << stu_id[i] << " " << stu_score[i] << endl;
}
}
int main()
{
int i,tn,ts;
Student<int,int,10>stu;
for(i=0;i<4;i++) //添加4个学生信息
{
cin>>tn>>ts;
stu.append(tn,ts);
}
cin>>tn;
stu.deleteStu(tn);//删除指定学号的学生
stu.sort(true);
Student<int,string,4>stu2;
string ts2;
for(i=0;i<4;i++) //添加4个学生信息
{
cin>>tn>>ts2;
stu2.append(tn,ts2);
}
cin>>tn;
stu2.deleteStu(tn);//删除指定学号的学生
stu2.sort();
stu.displayStudents();
stu2.displayStudents();
return 0;
}
应该是正确的了,但是在VS中又运行不了了,如果可以能否有佬帮忙解释以下,VS报错如下: