• 0
Sign in to follow this  
asantos38

erro de variável não declarada neste escopo[Resolvido]

Question

Boa tarde e feliz natal a todos.

Estou tentando fazer um programa utilizando o conhecimento que aprendi sobre POO. Meu programa consiste em um cadastro de alunos onde posso cadastrar seu nome, identidade e as notas de quatro bimestres. Alguns erros consegui sanar, mas o erro citado no título deste tópico não.

Segue o código e a mensagem de erro:

main.cpp:

#include <iostream>
#include "estudante.h"

using namespace std; 


int main(int argc, char *argv[]){
	Estudante e;

	e.cadastrarEstudante();

	e.cadastrarNotas();

	return 0;
}

 

estudante.h

#ifndef ESTUDANTE_H_INCLUDED
#define ETUDANTE_H_INCLUDED

class Estudante{
	friend void cadastrar_notas_bimestrais(short bimestre);

	protected:
		char *nome;
		int identidade;
		//Notas das provas.
		float matematica[4];
		float portugues[4];
		float historia[4];
	public:
		const char* getNome();
		int getId();
		void cadastrarNotas();
		void cadastrarEstudante();
		~Estudante();
};

#endif

estudante.cpp:

#include "estudante.h"
#include <cstdlib>
#include <cstring>
#include <iostream>

using namespace std;

void cadastrar_notas_bimestrais(short bimestre){
	cout << "Nota de matemática: ";
	cin >> matematica[bimestre - 1];
	cout << "Nota de português: ";
	cin >> portugues[bimestre - 1];
	cout << "Nota história: ";
	cin >> historia[bimestre - 1];
}

Estudante::~Estudante(){
	delete[] nome;

	nome = 0;
}

const char* Estudante::getNome(){
	return nome;
}

int Estudante::getId(){
	return identidade;
}

void Estudante::cadastrarNotas(){
	short bimestre;

	system("clear");

	cout << "Cadastro de notas\n\n\n";

	cout << "Informe o bimestre:";

	cin >> bimestre;

	switch(bimestre){
		case 1: cadastrar_notas_bimestrais(bimestre);
			break;
		case 2: cadastrar_notas_bimestrais(bimestre);
			break;
		case 3: cadastrar_notas_bimestrais(bimestre);
			break;
		case 4: cadastrar_notas_bimestrais(bimestre);
			break;
	}

	cout << "\n\n\nNotas cadastradas com sucesso!";
}

void Estudante::cadastrarEstudante(){
	char nome[41];
	
	system("clear");

	cout << "Cadastro de Aluno\n\n\n";
	
	cout << "Nome completo: ";

	cin.getline(nome, 41);

	this->nome = new char[strlen(nome) + 1];

	strcpy(this->nome, nome);

	cout << "Identidade: ";

	cin >> identidade;

	cout << "\n\ncadastro realizado com sucesso!";
}

Mensagem de erro:

[email protected]:~/Projetos/C++/projeto03$ g++ -o prog estudante.cpp main.cpp
estudante.cpp: In function ‘void cadastrar_notas_bimestrais(short int)’:
estudante.cpp:10:9: error: ‘matematica’ was not declared in this scope
  cin >> matematica[bimestre - 1];
         ^~~~~~~~~~
estudante.cpp:12:9: error: ‘portugues’ was not declared in this scope
  cin >> portugues[bimestre - 1];
         ^~~~~~~~~
estudante.cpp:14:9: error: ‘historia’ was not declared in this scope
  cin >> historia[bimestre - 1];
         ^~~~~~~~


Desde já agradeço.

Edited by asantos38
problema resolvido

Share this post


Link to post
Share on other sites

4 answers to this question

Recommended Posts

  • 0

Isto é um projeto de codeblocks ou devc++? Ou simplesmente você está usando o console para compilar? Ao parecer o comando " [email protected]:~/Projetos/C++/projeto03$ g++ -o prog estudante.cpp main.cpp
estudante.cpp:" parece estar errado já que repete estudante.cpp duas vezes. Não seria um .h e um .cpp?

Share this post


Link to post
Share on other sites
  • 0

cadastrar_notas_bimestrais esta como privada, não podes ter acesso a ela. Mude cadastrar_notas_bimestrais para acesso publico e prove.

Share this post


Link to post
Share on other sites
  • 0

Boa tarde, vangodp. Olhando com mais calma, consegui encontrar o erro. cadastrar_notas_bimestrais foi declarada friend da classe Estudante, mas não referenciei um objeto da classe como argumento da função. Por isso o erro, pois a função não tinha como ter acesso aos dados do objeto.Mas agradeço pelo seu interesse.

Abraços e feliz ano novo!

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this