Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Cosa rara

Estas en el tema de Cosa rara en el foro de C/C++ en Foros del Web. Este codigo lo he copiado del libro Visual C++ 6. Cuando lo ejecuto usando el Dev-C++ da error y se cierra. Lo he mirado y ...
  #1 (permalink)  
Antiguo 06/08/2008, 14:56
 
Fecha de Ingreso: julio-2008
Mensajes: 25
Antigüedad: 16 años, 4 meses
Puntos: 0
Cosa rara

Este codigo lo he copiado del libro Visual C++ 6. Cuando lo ejecuto usando el Dev-C++ da error y se cierra. Lo he mirado y me parece que esta bien. ¿Alguien sabria decirme?

#include <cstdlib>
#include <iostream>

using namespace std;

class SchoolClass
{
int *ClassData;
int ClassDataIndex;

public:
SchoolClass(int NumberStudents);
~SchoolClass(void);
void AddScore(int Score);
int GetScore(int Index);
float AverageScore(void);
};

SchoolClass::SchoolClass(int NumberStudents)
{
ClassData = new int(NumberStudents);
ClassDataIndex = 0;
}

SchoolClass::~SchoolClass(void)
{
delete ClassData;
}

void SchoolClass::AddScore(int Score)
{
ClassData[ClassDataIndex++] = Score;
}

int SchoolClass::GetScore(int Index)
{
if(Index <= ClassDataIndex)
{
return ClassData[Index];
}
else
{
return -1;
}
}

float SchoolClass::AverageScore(void)
{
float Sum = 0;

if(ClassDataIndex == 0)
{
return -1;
}
for(int loop_index = 0; loop_index < ClassDataIndex; loop_index++)
{
Sum += (float)ClassData[loop_index];
}
return Sum / (float) ClassDataIndex; /*por que da un error aqui?*/
}

int main(int argc, char *argv[])
{
SchoolClass HistoryClass(9);
SchoolClass EnglishClass(10);

HistoryClass.AddScore(80);
HistoryClass.AddScore(81);
HistoryClass.AddScore(82);
HistoryClass.AddScore(83);
HistoryClass.AddScore(84);
HistoryClass.AddScore(85);
HistoryClass.AddScore(86);
HistoryClass.AddScore(87);
HistoryClass.AddScore(88);

EnglishClass.AddScore(91);
EnglishClass.AddScore(92);
EnglishClass.AddScore(93);
EnglishClass.AddScore(94);
EnglishClass.AddScore(95);
EnglishClass.AddScore(96);
EnglishClass.AddScore(97);
EnglishClass.AddScore(98);
EnglishClass.AddScore(99);
EnglishClass.AddScore(100);

cout << "Nota media para la clase de Historia: " << HistoryClass.AverageScore() << "\n";
cout << "Nota media para la clase de Ingles: " << EnglishClass.AverageScore() << "\n";


system("PAUSE");
return EXIT_SUCCESS;
}
  #2 (permalink)  
Antiguo 06/08/2008, 17:26
 
Fecha de Ingreso: junio-2008
Mensajes: 63
Antigüedad: 16 años, 5 meses
Puntos: 2
Respuesta: Cosa rara

El error está en el constructor:

Código:
SchoolClass::SchoolClass(int NumberStudents)
{
	ClassData = new int(NumberStudents); // Los paréntesis indican que se asignará memoria para un int el cual tendrá inicialmente el valor de NumberStudents
	ClassDataIndex = 0;
}
debería ser:

Código:
SchoolClass::SchoolClass(int NumberStudents)
{
	ClassData = new int[NumberStudents]; // Un arreglo de int con tamaño NumberStudents
	ClassDataIndex = 0;
}
El compilador no lo reporta porque de ambas formas es correcto, pero hacen cosas diferentes.
  #3 (permalink)  
Antiguo 07/08/2008, 01:53
 
Fecha de Ingreso: julio-2008
Mensajes: 25
Antigüedad: 16 años, 4 meses
Puntos: 0
Respuesta: Cosa rara

Pues muchas gracias, no era capaz de verlo
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:03.