Code quản lý sinh viên bị lỗi [Error] no match for 'operator*'

#include <iostream>
using namespace std;
struct diem
{
	string name;
	float diemso;
};
struct infor_sv
{
	int stt;
	int msv;
	string name;
	diem diem[4];
	string h_kiem[5];
};
int so_sv;
void in_1sv(infor_sv &sv1);
//void in_all_sv(infor_sv &all_sv);
int main ()
{
	cout << "================================\nCHuong trinh quan li du lieu cua sinh vien";
	
	//cap phat bo nho dong cho ho so
	cout << "Nhap so luong sinh vien muon khai bao:";
	cin >> so_sv;
	infor_sv *danh_sach = new infor_sv[so_sv]; 
	
	//menu thao tac
	int t;
	cout<< "----------------------------------------------"<<endl;
        cout<< "Chon 1- Nhap du lieu cho sinh vien"<<endl;
        cout<< "Chon 2- Xuat danh sach sinh vien"<<endl;
        cout<< "Chon 3- Hien diem tich luy"<<endl;
        cout<< "Chon 4- Sap xep theo tang dan diem tich luy"<<endl;
        cout<< "Chon 5- Hien xep loai "<<endl;
        cout<< "Chon 0- Thoat chuong trinh va luu du lieu vao file"<<endl;
        cin>> t;
	//dieu huong xu li	
	switch(t)
        {
            case 1:
			     for (int i=0;i<so_sv;i++)
				{
					cout << "Sinh vien thu "<< i << endl;
					in_1sv(*danh_sach[i]);
				}
            case 2:
                
                break;
            case 3:
                
                break;
            case 4:
                
                break;
            case 5:
                
                break;
            case 0:
                
                break;
       }
}

void in_1sv(infor_sv &sv1)
{
	cout << "Nhap ma sinh vien:";
	cin >> sv1.msv;
	cout << "Nhap ho va ten sinh vien:";
	getline(cin,sv1.name);cout << endl;
	//gan ten cho cac dau diem
	sv1.diem[0].name= "THCS 4";
	sv1.diem[1].name= "Dai so";
	sv1.diem[2].name= "Giai tich";
	sv1.diem[3].name= "Diem tich luy";
	// nhap cac dau diem co sinh vien 1
	for (int i=0;i<4;i++)
	{
		do 
		{
			cout <<"Nhap diem mon" << sv1.diem[i].name <<":";
			cin >> sv1.diem[i].diemso;
			if (sv1.diem[i].diemso >=10 or sv1.diem[i].diemso <=0) 
			cout << "Phai nhap dau diem trong khoang 0 den 10";
		}
		while(sv1.diem[i].diemso >=10 or sv1.diem[i].diemso <=0);
	}
}

Mọi người cho em hỏi sao đoạn cuối này em không thể sử dụng con trỏ *danh_sach với qua khai báo struct infor_sv vậy ạ. Em đã cấp phát mảng động cho nó ở phía trên rồi nhưng mang xuống dưới khi gán nó vào hàm in_1sv ở case 1 trong main thì nó báo lỗi [Error] no match for 'operator*' (operand type is 'infor_sv') em nghĩ nó không dùng được dưới dạng mảng có chỉ số [i] đằng sau.

Bạn giải thích dòng này xem nào?

Hàm cần tham số kiểu info_sv&.
Bạn có thử dùng danh_sach[i] (không có *) chưa?

1 Like

danh_sach[i] mới được. Vì danh_sach[i] thực ra là *(danh_sach + i).

2 Likes

Anh nói em mới để ý cái danh_sach[i] nó đã là một con trỏ rồi nên không cần *

1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?