Почему не идентифицируется переменная NAN?

в 2017 вижуале все работало,а в 2012 все сломалось(((

#include <iostream>
using namespace std;

class Rectangle
{
public:

	Rectangle() : Left(0), Up(0), Right(0), Down(0) {};
	Rectangle(const Rectangle& RECTANGLE) : Left(RECTANGLE.Left), Up(RECTANGLE.Up), Right(RECTANGLE.Right), Down(RECTANGLE.Down) {};
	~Rectangle() {};

	double Area();
	double Perimeter();
	void Revise();

	friend istream& operator>>(istream& IN, Rectangle& RECTANGLE);
	friend ostream& operator<<(ostream& OUT, const Rectangle& RECTANGLE);

	Rectangle& operator=(const Rectangle& RECTANGLE);

	Rectangle operator+(const Rectangle& RECTANGLE);
	Rectangle operator*(const Rectangle& RECTANGLE);

private:

	double Left, Up, Right, Down;

};

double Rectangle::Area()
{
	return abs(Right - Left) * abs(Up - Down);
};
double Rectangle::Perimeter()
{
	return 2 * (abs(Right - Left) + abs(Down - Up));
};
void Rectangle::Revise()
{
	double TEMP;
	if (Left > Right)
	{
		TEMP = Left;
		Left = Right;
		Right = TEMP;
	};
	if (Up < Down)
	{
		TEMP = Up;
		Up = Down;
		Down = TEMP;
	};
};

Rectangle& Rectangle::operator=(const Rectangle& RECTANGLE)
{
	if (this == &RECTANGLE) return *this;
	Left = RECTANGLE.Left;
	Up = RECTANGLE.Up;
	Right = RECTANGLE.Right;
	Down = RECTANGLE.Down;
};
Rectangle Rectangle::operator+(const Rectangle& RECTANGLE)
{
	Rectangle TEMP;
	Left <= RECTANGLE.Left ? TEMP.Left = Left : TEMP.Left = RECTANGLE.Left;
	Up >= RECTANGLE.Up ? TEMP.Up = Up : TEMP.Up = RECTANGLE.Up;
	Right >= RECTANGLE.Right ? TEMP.Right = Right : TEMP.Right = RECTANGLE.Right;
	Down <= RECTANGLE.Down ? TEMP.Down = Down : TEMP.Down = RECTANGLE.Down;
	return TEMP;
};
Rectangle Rectangle::operator*(const Rectangle& RECTANGLE)
{
	Rectangle TEMP;
	Left >= RECTANGLE.Left ? TEMP.Left = Left : TEMP.Left = RECTANGLE.Left;
	Up <= RECTANGLE.Up ? TEMP.Up = Up : TEMP.Up = RECTANGLE.Up;
	Right <= RECTANGLE.Right ? TEMP.Right = Right : TEMP.Right = RECTANGLE.Right;
	Down >= RECTANGLE.Down ? TEMP.Down = Down : TEMP.Down = RECTANGLE.Down;
	if ((TEMP.Left > TEMP.Right) || (TEMP.Up < TEMP.Down)) TEMP.Left = TEMP.Up = TEMP.Right = TEMP.Down = NAN;
	return TEMP;
};

istream& operator>>(istream& IN, Rectangle& RECTANGLE)
{
	IN >> RECTANGLE.Left >> RECTANGLE.Up >> RECTANGLE.Right >> RECTANGLE.Down;
	RECTANGLE.Revise();
	return IN;
};
ostream& operator<<(ostream& OUT, const Rectangle& RECTANGLE)
{
	OUT << RECTANGLE.Left << " < x < " << RECTANGLE.Right << ", " << RECTANGLE.Down << " < y < " << RECTANGLE.Up;
	return OUT;
};

void main()
{
	setlocale(LC_ALL, "Russian");
	Rectangle A, B;
	cout << "Введите координаты точек, задающих прямоугольник A: ";
	cin >> A;
	cout << "\nA: " << A << "\nПлощадь A = " << A.Area() << "\nПериметр A = " << A.Perimeter();
	cout << "\n\nВведите координаты точек, задающих прямоугольник B: ";
	cin >> B;
	cout << "\nB: " << B << "\nПлощадь B = " << B.Area() << "\nПериметр B = " << B.Perimeter();
	cout << "\n\nA * B = " << A * B;
	cout << "\nA + B = " << A + B << endl;
	system("pause");
}
  • Вопрос задан
  • 71 просмотр
Решения вопроса 1
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
Предположу, что NAN появился в С++11, а VS12 его, вероятно, не поддерживает.
Ну и, справдливости ради, определятся он в <cmath>, который неплохо было бы явно подключить.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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