Errore costruttore c++

di il
2 risposte

Errore costruttore c++

Salve, perchè il compilatore in TesterStudente.cpp mi da questo errore "error: expected unqualified-id before '(' token" quando provo a scrivere questo ?
studente arrS[3];
arrS[0].("matematica", "informatica" , "italiano" , "fisica", "storia"); <-- mi da l'errore su questa riga


TesterStudente.cpp
#include <iostream>
#include "studente.h"

int main(void) {

	studente arrS[3];
	arrS[0].("matematica", "informatica" , "italiano" , "fisica", "storia");
	arrS[0].setMatricola("111111");
	arrS[0].setNome("Primo nome");
	arrS[0].setEsame(25,0);
	arrS[0].setEsame(30,1);
	arrS[0].setEsame(27,2);
	arrS[0].setEsame(22,3);
	arrS[0].setEsame(25,4);
	arrS[0].printStudente();

	arrS[1].("matematica", "informatica" , "italiano" , "fisica", "storia");
	arrS[1].setMatricola("222222");
	arrS[1].setNome("Secondo nome");
	arrS[1].setEsame(25,0);
	arrS[1].setEsame(30,1);
	arrS[1].setEsame(27,2);
	arrS[1].setEsame(22,3);
	arrS[1].setEsame(25,4);
	arrS[0].printStudente();

	arrS[2].("matematica", "informatica" , "italiano" , "fisica", "basi di dati");
	arrS[2].setMatricola("222222");
	arrS[2].setNome("Terzo nome");
	arrS[2].setEsame(25,0);
	arrS[2].setEsame(30,1);
	arrS[2].setEsame(27,2);
	arrS[2].setEsame(22,3);
	arrS[2].setEsame(25,4);
	arrS[0].printStudente();


	system("pause");
	return 0;
}
studente.h
#ifndef STUDENTE_H_
#define STUDENTE_H_
#include <string>
#include "esame.h"
#define N_ESAMI 5

class studente {
public:
	studente();
	studente(std::string, std::string, std::string, std::string, std::string);
	void setMatricola(std::string);
	void setNome(std::string);
	std::string getMatricola();
	std::string getNome();
	int getNumEsami() { return N_ESAMI; };
	void setEsame(int, int);
	int getVotoEsame(int);
	std::string getNomeEsame(int);
	bool getSostenuto(int);
	float getMedia();
	void printStudente();

private:
	std::string matricola;
	std::string nome;
	esame e[5];
	const int nEsami = N_ESAMI;
};



#endif /* STUDENTE_H_ */
studente.cpp
#include <iostream>
#include "studente.h"

studente::studente() {
	for (int i=0; i<N_ESAMI; ++i) {
		e[i].setEsame("");
		e[i].setSostenuto(0);
	}
}

studente::studente(std::string a, std::string b , std::string c , std::string d, std::string e) {
	this->e[0].setEsame(a);
	this->e[0].setSostenuto(0);

	this->e[1].setEsame(b);
	this->e[1].setSostenuto(0);

	this->e[2].setEsame(c);
	this->e[2].setSostenuto(0);

	this->e[3].setEsame(d);
	this->e[3].setSostenuto(0);

	this->e[4].setEsame(e);
	this->e[4].setSostenuto(0);
}

void studente::setMatricola(std::string m) {
	matricola = m;
}

void studente::setNome(std::string n) {
	nome = n;
}

std::string studente::getMatricola() {
	return matricola;
}

std::string studente::getNome() {
	return nome;
}

void studente::setEsame(int v, int i) {
	e[i].setVoto(v);
}

int studente::getVotoEsame(int i) {
	return e[i].getVoto();
}

std::string studente::getNomeEsame(int i) {
	return e[i].getEsame();
}

bool studente::getSostenuto(int i) {
	return e[i].isSostenuto();
}

float studente::getMedia() {
	int sum = 0;
	for (int i=0; i<N_ESAMI; ++i) {
		sum = sum + e[i].getVoto();
	}

	return (sum/N_ESAMI);
}

void studente::printStudente() {
	std::cout << "Matricola studente: " << matricola << std::endl;
	std::cout << "Nome studente: " << nome << std::endl;
	std::cout << "Voti studente: ";

	for (int i=0; i<N_ESAMI; ++i) {
		std::cout << e[i].getVoto() << " ";
	}
	std::cout<<std::endl;

	std::cout << "Numero esami: " << N_ESAMI << std::endl;
}
Grazie.

2 Risposte

  • Re: Errore costruttore c++

    Dovrebbe essere così
    
    studente arrS[3];
    arrS[0] = ("matematica", "informatica" , "italiano" , "fisica", "storia");
    
    O così
    
    arrS[0] = srudente("matematica", "informatica" , "italiano" , "fisica", "storia");
    
    Se non va, devi definire un operatore di assegnazione su studente e esame, perché in alcuni casi non può usare quello di default.
  • Re: Errore costruttore c++

    Ok. grazie, ho risolto creando un operatore di assegnazione.
Devi accedere o registrarti per scrivere nel forum
2 risposte