因此,我想创建一个类来处理一个学生,这个学生有一个名字,并定义了最大的科目数量,为此他可以有有限的分数(以浮点数1-10表示)。
该代码以意大利语单词作为变量和注释,但是我认为这样做是可以理解的。该结构设置为由15个元素组成的数组,每个元素包含一个名称,一个标记数组和一个计数器。
构造函数设置主题名称,并将每个主题的所有标记设置为0(我将解释原因)。
方法:getMaterie打印所有主题; setVoto在特定主题中设置标记并增加计数器; getVoti打印主题的所有标记; getMedia对您的标记取平均值并返回值(为此,我使用了一个计数器,否则将是/ 30,这是不正确的)。
我的错误出现在第66行:从“ Studente *”到非标量类型“ Studente”的转换请求
#include <iostream>
#include <string>
using namespace std;
struct mat{
string nome;
float voti[30];
int counter;
}m[15];
class Studente{
private:
string nome;
string materia[];
public: Studente(string nom, int nm, string nomemateria[]){ //costruttore: richiesti nome dello studente, nome delle materie e l'indice per indicare
nome = nom; //la quantità delle materie
for(int i=0; i<nm; i++){ //ciclo con cui si impostano i nomi delle materie
m[i].nome = nomemateria[i];
for(int j=0; j<30; j++){ //ciclo con cui si impostano a ZERO tutti gli elementi degli array dei voti (per la media!)
m[i].voti[j]=0;
}
}
}
public: void getMaterie(int nm){ //si richiede il numero di materie totali. E' necessario perchè l'utente può decidere (su un massimo di 15)
for(int i=0; i<nm; i++){
cout<<i<<" "<<m[i].nome;
}
}
public: void setVoto(int nm, float voto){ //si richiede il numero di materia alla quale inserire il voto, e il voto da inserire
m[nm].voti[m[nm].counter] = voto;
m[nm].counter++;
}
public: void getVoti(int nm){ //si richiede il numero di riferimento della materia della quale si vogliono stampare i voti
for(int i=0; i<nm; i++){
cout<<m[i].voti[i]<<" ";
}
}
public: float getMedia(int nm){ //si richiede l'indice della materia di cui si vuole fare la media dei voti
float media=0;
for(int i=0; i<30; i++){
media+= m[nm].voti[i];
}
return (media/m[nm].counter);
}
};
int main(){
string nome;
int quantematerie;
cout<<"Inserisci nome studente: "; cin>>nome;
cout<<"Inserisci numero delle materie: "; cin>>quantematerie;
string nomimaterie[quantematerie];
for(int i=0; i<quantematerie; i++){
string risposta;
cout<<"Inserisci nome materia "<<i+1<<": "; cin>>risposta;
nomimaterie[i] = risposta;
}
Studente s = new Studente(nome, quantematerie, nomimaterie);
int scelta = 0;
while(1){
cout<<"1. Stampa tutte le materie 2.Imposta voto in materia x 3.Guarda voti materia x 4.Media materia x 0. Esci"<<endl<<"Scelta: "; cin>>scelta;
switch(scelta){
case 1: s.getMaterie(quantematerie);
case 2: int materia; float voto; cout<<"Inserici numero materia a cui aggiungere voto: "; cin>>materia;
cout<<"Inserisci voto da inserire: "; cin>>voto; s.setVoto(materia, voto); break;
case 3: cout<<"Inserisci numero materia: "; cin>>materia; s.getVoti(materia); break;
case 4: cout<<"Inserisci numero materia: "; cin>>materia; s.getMedia(materia); break;
case 0: return 0;
default: cout<<"Valore non riconosciuto";
}
}
}
最佳答案
new
为您提供指向新分配的内存的指针。该错误告诉您不能将Studente*
分配给Studente
,即您需要使用:
Studente* s = new Studente(...)
或者更好的方法是,只需在堆栈上分配对象,因为在这种情况下不需要堆内存:
Studente s{nome, quantematerie, nomimaterie};
或者,如果您坚持使用堆,请使用smart pointers以获得更好的语义,自动清除等。
关于c++ - 转换为非标量误差意味着什么?我该如何解决?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58493967/