gpt4 book ai didi

c++ - 转换为非标量误差意味着什么?我该如何解决?

转载 作者:行者123 更新时间:2023-11-28 01:16:38 25 4
gpt4 key购买 nike

因此,我想创建一个与学生打交道的类(class),该学生有姓名和定义的最大科目数,他可以为此获得有限数量的分数(用 float 1-10 表示)。该代码将意大利语单词作为变量和注释,但我认为我尝试做的事情是可以理解的。 struct 设置为包含 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com