Я работаю над школьным проектом на C++, использую конструкторы. У меня будет базовая школьная система, которая будет заключаться в работе с именами учащихся, идентификаторами учащихся, оценками учащихся (с массивом с плавающей запятой []) и необязательным тестом на подстановку. значения, которые я объявил для основной функции.
Это файл function.cpp:
#include "aluno.h"
#include <stdio.h>
#include <string.h>
#include <string>
#include <iostream>
using namespace std;
Aluno::Aluno(){
cout << "Objeto 1 inicializado!\n";
}
Aluno::Aluno(char* name, int rgm, float notas[2], float nota_sub){
this->nome = name;
this->rgm = rgm;
this->notas = notas;
this->nota_sub = nota_sub;
cout << "Objeto 2 inicializado!\n";
}
Aluno::~Aluno(){
cout << "Aluno destruido: " << nome;
cout << "Objeto destruido!";
}
void Aluno::entrada(){
cout << "Digite seu NOME: ";
cin >> nome;
cout << "Digite seu RGM: ";
cin >> rgm;
cout << "Digite sua nota do primeiro bimestre: ";
cin >> notas[0];
cout << "Digite sua nota do segundo bimestre: ";
cin >> notas;
cout << "Digite sua nota da substutiva: ";
cin >> nota_sub;
}
При попытке сделать это-> notas = notas я получаю следующую ошибку:
expression must be a modifiable lvalueC/C++(137)
Это файл .h:
#ifndef ALUNO_H
#define ALUNO_H
class Aluno
{
private:
char* nome;
int rgm;
float notas[2];
float nota_sub;
public:
Aluno();
Aluno(char* name, int rgm, float notas[2], float nota_sub = 11);
~Aluno();
void entrada();
void imprime();
bool aprovado();
};
#endif
И главный файл:
#include <iostream>
#include "aluno.h"
using namespace std;
int main()
{
float notas[2] = {5.3, 6.2};
Aluno aluno1("Nilton", 1904659, notas);
return 0;
}
Также обратите внимание, что float notas[2] в Aluno::Aluno, скорее всего, не означает то, что вы думаете. См. Передача массивов в функцию в C++
Вы не можете копировать массивы на C / C++, используя только operator=. Вы можете попробовать this->notas[0] = notas[0]; this->notas[1] = notas[1];. Возможно, существуют более короткие обозначения. Вы бы сэкономили себе (и нам) усилия, если бы использовали std::array<float, 2> вместо float[2] - тогда копирование было бы легким.
paddy прав в отношении синтаксической ошибки. На самом деле у вас есть параметры несколько. Один из них - использовать std :: copy. Другой вариант - объявить массив без размера: float notas[]. Наилучший вариант - использовать контейнер-массив std :: array вместо «сырого» массива.





Ну, да. Вы не можете копировать-назначать массивы. Это C++ 101. Используйте
std::copy.