Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.12.2010, 02:06   #1
coNsept
Форумчанин
 
Аватар для coNsept
 
Регистрация: 14.12.2009
Сообщений: 716
По умолчанию Ошибка при вызове метода класса

Доброго времени суток уважаемые. Возникла проблемка, мол с чтением из памяти.
То есть, если я пытаюсь отобразить список студентов, в главной функции main, все якбы нормально, но если я пытаюсь вызвать метод Cmp(), и пытаюсь отобразить мой список студентов, компилятор начинает ругаться. Или я что-то не понимаю, что скорее всего или хз - помогите исправить. То есть как можно нормально организовать ввод данных студентов и нормально их отображать. Это все описывать в методах.
Программу только начал набрасывать, извиняюсь за плохой код...

Примечание: Мой метод ввода таков, я создал массивный объект класса, и оператором перегрузки >> уже ввожу данные.

Screenshot:

Код:
#include <stdio.h>
#include <conio.h>
#include <Windows.h>
#include <istream>
#include <ostream>
#include <iostream>

using namespace std;

class Student
{
private:
	char *nume;
	char *specialitate;
	int anul_invatamint;
	float balul_mediu_student;
public:
	int nr_student;
	int nr_schimb_stud;

	Student();
	~Student();

	friend istream & operator >> (istream& in, Student& object);
	friend ostream & operator << (ostream& out, Student& object);

	void Def();
	void Cha();
	void Cmp();
	void AllocMemory(int Size);
	void ReallocMemory(int Size);
};

Student::Student()
{
	nume                = NULL;
	specialitate        = NULL;
	anul_invatamint     = 0;
	balul_mediu_student = 0.0; // float 
}

Student::~Student()
{
	//delete [] nume;
	//nume = NULL;
	//delete [] specialitate;
	//specialitate = NULL;
}

istream & operator >> (istream& in, Student& object)
{
	if (object.nume == NULL && object.specialitate == NULL)
		object.AllocMemory(50);
	else
		object.ReallocMemory(50);

	cout << "Numele: ";
	in >> object.nume;
	cout << "Specialitate: "; 
	in >> object.specialitate;
	cout << "Anul de invatamint: "; 
	in >> object.anul_invatamint;
	cout << "Balul mediu: "; 	
	in >> object.balul_mediu_student;
	cout << "\n";
	return in;
}

ostream & operator << (ostream& out, Student& object)
{
	cout << "--------------------------------------------------------------------------------";
	cout << "Numele: ";
	out << object.nume;
	cout << "\n";
	cout << "Specialitate: "; 
	out << object.specialitate;
	cout << "\n";
	cout << "Anul de invatamint: "; 
	out << object.anul_invatamint;
	cout << "\n";
	cout << "Balul mediu: "; 	
	out << object.balul_mediu_student;
	cout << "\n";
	cout << "--------------------------------------------------------------------------------";
	return out;
}

void Student::Def()
{
	cout << "\nNumarul de studenti: "; 
	cin >> nr_student; cout << "\n";
}

void Student::Cha()
{
	cout << "\nIndicile studentului: "; 
	cin >> nr_schimb_stud; cout << "\n";
}

void Student::Cmp()
{
	Student array[256];

	for (int i = 0; i < nr_student; i++)
	{
		printf("[%d]\n", i);
		cout << array[i].nume;
		cout << array[i].specialitate;
		cout << array[i].anul_invatamint;
		cout << array[i].balul_mediu_student;
	}
}

void Student::AllocMemory(int Size)
{
	nume = new char[Size + 1];
	specialitate = new char[Size + 1];
}

void Student::ReallocMemory(int Size)
{
	nume = (char*)realloc(0, Size + 1);
	specialitate = (char*)realloc(0, Size + 1);
}

class Grupa
{
private:
	int Studenti;
	float Bal_mediu_grupa;
public:
	Grupa();
	~Grupa();
};

Grupa::Grupa()
{
	Studenti = 0;
	Bal_mediu_grupa = 0.0; // float
}

Grupa::~Grupa()
{
}

void Interface()
{
	cout << "--------------------------------------------------------------------------------";
	cout << "[1]: Definirea/schimbarea/compararea  datelor studentului\n";
	cout << "[4]: Adaugarea unui student nou\n";
	cout << "[5]: Eliminare unui student\n";
	cout << "[6]: Determinarea balului mediu pe grupa\n";
	cout << "--------------------------------------------------------------------------------";
}

void main(void)
{
	system("CLS");
	Interface();

	Student Access, array[256];		
				
	// ----------
	Access.Def();		
	// ----------

	for (int i = 0; i < Access.nr_student; i++)
	{
		printf("[%d]\n", i);
		cin >> array[i];
	}

	cout << "\n";

	for (int i = 0; i < Access.nr_student; i++)
	{
		printf("[%d]\n", i);
		cout << array[i];
	}

	// ----------
	Access.Cha();
	// ----------

	for (int i = 0; i < Access.nr_student; i++)
	{
		if (Access.nr_schimb_stud == i)
		{
			cin >> array[i]; 
			//cout << array[i];
		}
	}

	for (int i = 0; i < Access.nr_student; i++)
	{
		printf("[%d]\n", i);
		cout << array[i];
	}

	_getch(); cout << "\n ==================================";
	Access.Cmp();

	_getch();
}

Последний раз редактировалось coNsept; 14.12.2010 в 02:12.
coNsept вне форума Ответить с цитированием
Старый 14.12.2010, 10:01   #2
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

Понятное дело - в методе Cmp объявляется локальный массив, который не инициализируется ничем путным, и потом его неинициализированные элементы вместе с их членами пытаются выводиться.
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Старый 14.12.2010, 13:09   #3
coNsept
Форумчанин
 
Аватар для coNsept
 
Регистрация: 14.12.2009
Сообщений: 716
По умолчанию

Фэнкс, теперь все понятно.
coNsept вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
beginthread, ошибка при вызове Dreanks Помощь студентам 2 28.10.2010 14:09
Ошибка при реализации метода класса, имеющего поле шаблоннного типа. DKOI Общие вопросы C/C++ 5 19.10.2010 19:10
Ошибка компиляции при вызове подпрограммы Android_ua Общие вопросы C/C++ 4 02.03.2010 12:20