7-3 通过指针,输出对象数组的数据

7-3 通过指针,输出对象数组的数据

分数 100

作者 杨雪华

单位 沈阳师范大学

设计一个类,主函数中建立一个对象数组,输入5个学生数据(学号、成绩),用对象指针指向数组首元素,输出5个学生的数据。

输入格式:

输入5个学生数据(学号、成绩),学号为不超过10000的正整数,成绩为0-100的正整数。

输出格式:

按顺序输出学生的学号和成绩,每行显示一个学生的信息。

输入样例:

在这里给出一组输入。例如:

101 90
102 80
103 70
104 60
105 50

输出样例:

在这里给出相应的输出。例如:

101 90
102 80
103 70
104 60
105 50

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

栈限制

8192 KB

第一次运行代码报错(错误的)

#include <iostream>
using namespace std;
class Student
{
	public:
		int id;
		int score;
		
		Student (int id,int score):id(id),score(score)
		{
			
		}
		void display() const{
			cout << id <<" "<<score << endl;
		}
        
		
};
int main()
{
	Student students[5];
	for (int i = 0;i<5;i++)
	{
		int id,score;
		cin >>id >>score;
		students[i] =Student(id,score);
	}
	Student* ptr = students;
	for(int i =0;i<5;i++)
		{
			ptr->display();
			++ptr;
		}
		return 0;
		}

报错

查资料后

这个错误表明编译器在尝试创建一个Student对象时,没有找到合适的默认构造函数(即不带参数的构造函数)。在你的代码中,你提供了一个带有两个参数的构造函数Student(int id, int score),但是如果你尝试创建一个Student对象数组(比如Student students[5];),并且没有显式地初始化每个对象,编译器会尝试使用默认构造函数来初始化它们。

由于你没有提供默认构造函数,编译器找不到一个合适的构造函数来调用,因此会报出这个错误。

为了解决这个问题,你可以做以下两件事中的任何一件:

提供一个默认构造函数。这可以是一个空构造函数,或者是一个带有默认参数的构造函数。例如:

class Student {
public:
    int id;
    int score;
    // 默认构造函数
    Student() : id(0), score(0) {}
    // 带参数的构造函数
    Student(int id, int score) : id(id), score(score) {}
    // ... 其他成员函数 ...
};
 

在创建数组时,显式地初始化每个对象。这可以通过使用花括号初始化列表或者循环初始化来实现。例如:

// 使用花括号初始化列表
Student students[5] = {
    {101, 90},
    {102, 80},
    {103, 70},
    {104, 60},
    {105, 50}
};
// 或者在循环中初始化for (int i = 0; i < 5; ++i) {
    // 假设有一个函数可以生成id和score
    int id = generateId();
    int score = generateScore();
    students[i] = Student(id, score);
}


注意,在C++11及以后的版本中,如果你不提供任何构造函数,编译器会为你自动生成一个默认构造函数。但是,一旦你提供了任何构造函数(如你提供的带参数的构造函数),编译器就不会再自动生成默认构造函数了。因此,在这种情况下,你需要显式地提供一个默认构造函数,或者在创建对象时提供初始化。

正确代码

#include <iostream>
using namespace std;
class Student
{
	public:
		int id;
		int score;
		//默认构造函数
		Student ():id(0),score(0){
		} 
		Student (int id,int score):id(id),score(score)
		{
			
		}
		void display() const{
			cout << id <<" "<<score << endl;
		}
        
		
};
int main()
{
	Student students[5];
	for (int i = 0;i<5;i++)
	{
		int id,score;
		cin >>id >>score;
		students[i] =Student(id,score);
	}
	Student* ptr = students;
	for(int i =0;i<5;i++)
		{
			ptr->display();
			++ptr;
		}
		return 0;
		}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值