Где ошибка в коде и как ее исправить?

Код
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <fstream>
#include <iomanip>
using namespace std;
class CONTRY
{
	char* name;
	double temp_summer = 0, temp_autumn = 0, temp_winter = 0, temp_spring = 0;
public:
	CONTRY() { name = NULL; temp_summer, temp_autumn, temp_winter, temp_spring; };
	CONTRY(char*, double, double, double, double);
	~CONTRY() { delete[]name; }
	CONTRY& operator=(const CONTRY& p);
	char* getname() { return name; }
	double gettemp_winter() { return temp_winter; }
	double gettemp_spring() { return temp_spring; }
	double gettemp_summer() { return temp_summer; }
	double gettemp_autumn() { return temp_autumn; }
	friend ostream& operator<<(ostream& s, const CONTRY& p);
	friend istream& operator>>(istream& s, CONTRY& p);
	CONTRY(const CONTRY&);
};
CONTRY::CONTRY(char* aname, double atemp_winter, double atemp_spring, double atemp_summer, double atemp_autumn)
{
	int n;
	n = strlen(aname);
	name = new char[n + 1];
	strcpy(name, aname);
	temp_winter = atemp_winter;
	temp_spring = atemp_spring;
	temp_summer = atemp_summer;
	temp_autumn = atemp_autumn;
}
CONTRY::CONTRY(const CONTRY& p)
{
	int n = strlen(p.name);
	name = new char[n + 1];
	strcpy(name, p.name);
	temp_winter = p.temp_winter;
	temp_spring = p.temp_spring;
	temp_summer = p.temp_summer;
	temp_autumn = p.temp_autumn;
}

CONTRY& CONTRY::operator=(const CONTRY& p)
{
	if (this != &p)
	{
		delete[]name;
		name = new char[strlen(p.name) + 1];
		strcpy(name, p.name);
		temp_winter = p.temp_winter;
		temp_spring = p.temp_spring;
		temp_summer = p.temp_summer;
		temp_autumn = p.temp_autumn;
	}
	return *this;
}
ostream& operator<<(ostream& s, const CONTRY& p)
{
	s << p.name << setw(17) << p.temp_winter << setw(21) << p.temp_spring << setw(10) << p.temp_summer << setw(10) << p.temp_autumn << setw(10);
	return s;
}
istream& operator>>(istream& s, CONTRY& p)
{
	char lol[100];
	s >> lol >> p.temp_winter >> p.temp_spring>>p.temp_summer>> p.temp_autumn;
	int n = strlen(lol);
	delete[]p.name;
	p.name = new char[n + 1];
	strcpy(p.name, lol);
	return s;
}

int main()
{
	setlocale(LC_ALL, "Russian");
	CONTRY *a[100];
	int n, i;
	cout << "Введите кол-во стран: ";
	cin >> n;
	cout << "СТРАНА,ТЕМПЕРАТУРА ЗИМОЙ,ВЕСНОЙ,ЛЕТОМ И ОСЕНЬЮ: ";

	for (i = 0; i < n; i++)
		cin  >> a[i];
	cout << "Название изделия | Средний срок работы | Стоимость|\n";
	for (i = 0; i < n; i++)
		cout << a[i] << "\n";
	int winter = a[0]->gettemp_winter();
	int summer = a[0]->gettemp_summer();
	for (i = 0; i < n; i++)
	{
		if (winter < a[i]->gettemp_winter())
			winter = a[i]->gettemp_winter();
		if (summer > a[i]->gettemp_summer())
			summer = a[i]->gettemp_summer();

	}
	for (i = 0; i < n; i++)
	{
		if (a[i]->gettemp_winter() == winter)

			cout << "СТРАНА С САМОЙ ТЕПЛОЙ ЗИМОЙ \n" << a[i]->getname << "ТЕМПЕРАТУРА ЗИМОЙ = " << winter << endl;
		if (a[i]->gettemp_summer() == summer)
			cout << "СТРАНА С САМЫМ ХОЛОДНЫМ ЛЕТОМ \n " << a[i]->getname << "ЛЕТНЯЯ ТЕМПЕРАТУРА = " << summer << endl;
	}


	system("pause");
}
  • Вопрос задан
  • 153 просмотра
Решения вопроса 1
@menkar3
spoiler
Все переписа...

Замена1 (как сказали выше):
CONTRY *a[100];
на
CONTRY* a = new CONTRY[100];

Замена2 в main начиная отсюда:
int winter = a[0]->gettemp_winter();
  int summer = a[0]->gettemp_summer();
...
На
  int winter = a[0].gettemp_winter();
  int summer = a[0].gettemp_summer();
...и т.д.

У вас теперь указатель на массив а не массив указателей, так что все -> меняем на .
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
fzfx
@fzfx
18,5 дм
что вы уже успели сделать для того, чтобы исправить ошибку самостоятельно, Валерия? тут, конечно, бывают мужики, которые не обломятся размотать вашу маляву, но чёткой братве, которая в крестах чалится не первый год, шквариться об такие большие телеги без какого-либо дополнительного информационного подогрева с вашей стороны западло.
а пока, исходя из предоставленной информации, в общем случае я бы предложил заменить устройство кодогенерации.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы