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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.04.2012, 22:39   #1
kolobuch
Новичок
Джуниор
 
Регистрация: 16.04.2012
Сообщений: 1
По умолчанию C++ Builder Перегрузка оператора = с ошибкой Could not find a match for 'operator Vector2D::=(const Vector2D)'

Для сортировки шаблонного масива, нужно перегрузить оператор = для класса. В результате ошибка [BCC32 Error] File1.cpp(109): E2285 Could not find a match for 'operator Vector2D::=(const Vector2D)'.
Код:
#pragma hdrstop
#include <tchar.h>
#include <iostream.h>
#include <conio.h>
//---------------------------------------------------------------------------
#pragma argsused
//---------------------------------------------------------------------------
class Vector2D {
private:
	double x;
	double y;

public:

	Vector2D():x(0), y(0) {}
	Vector2D(double val):x(val), y(val) {}
	Vector2D(double _x, double _y):x(_x), y(_y) {}

	double GetX() const {return x;}
	double GetY() const {return y;}

	void SetX(double _x) {x = _x;}
	void SetY(double _y) {y = _y;}

	Vector2D operator=(const Vector2D &op2)
	{
		if (this == &op2) return *this;

		x = op2.x;
		y = op2.y;

		return *this;
	}

	void operator+=(const Vector2D &op2)
	{
		x = x + op2.x;
		y = y + op2.y;
	}

	bool operator<(const Vector2D &op2) const {

		double len1 = sqrt(x*x + y*y);
		double len2 = sqrt(op2.x*op2.x + op2.y*op2.y);

		return (len1 < len2);
	}
	bool operator>(const Vector2D &op2) const {

		double len1 = sqrt(x*x + y*y);
		double len2 = sqrt(op2.x*op2.x + op2.y*op2.y);

		return (len1 < len2);
	}

	friend ostream &operator<<(ostream &stream, const Vector2D &op2);
};
ostream &operator<<(ostream &stream, const Vector2D &op2) {
	stream << "(" << op2.x << ", " << op2.y << ")";
	return stream;
}
//---------------------------------------------------------------------------
template <class T, int MaxSize>
class Array {
	T arr[MaxSize];	// масив
	int size;		// кількість елементів у масиві

public:
	Array(): size(0) {};
	Array(int n): size(n) {};	//  виділяє пам'ять для масиву під n елементів

	void push(T elem)	// функція, яка додаватиме елемент у кінець масива
	{
		arr[size] = elem;
		size++;
	}
	int GetSize() const {return size;}

	T &operator[](int index) {return arr[index];}

	T Sum() const	// пошук суми
	{
		T sum(0);
		for (int i=0; i<size; i++) sum += arr[i];

		return sum;
	}

	T Max() const	// максимальний елемент
	{
		int indexmax = 0;
		for (int i=0; i<size; i++)
		{
			if ( arr[indexmax] < arr[i] ) indexmax = i;
		}
        return arr[indexmax];
	}

	T SortAscending() const
	{
		for (int i=0; i < size; i++)
			for (int j=0; j < size; j++)
			{
				if (arr[i] > arr[j])
				{
				T tmp(0);
				tmp = arr[i];
				tmp=tmp;
				arr[i] = arr[j];
				arr[j] = tmp;
				}
			}
	}

	void SortDescending() const
	{
		for (int i=0; i < size; i++)
			for (int j=0; j < size; j++)
			{
				if (arr[i] < arr[j])
				{
					T tmp(0);
					tmp = arr[i];
					arr[i] = arr[j];
					arr[j] = tmp;
				}
			}
	}

	friend ostream &operator<<(ostream &stream, const Array &op2);
	};
//---------------------------------------------------------------------------
int main()
{
	const int SizeOfMass = 5;
	int x, y;
	cout << "Vvedit rozmirnist vectora:" <<endl;

	Array<Vector2D, SizeOfMass> obj;

	// додаєм елементи у вектор
	for (int i=0; i<SizeOfMass; i++)
	{
		cout << "x:"; cin >> x;
		cout << "y:"; cin >> y;
		cout << endl;
		obj.push( Vector2D(x, y) );
	}

	// виводим на екран
	for (int i=0; i<obj.GetSize(); i++)
	{
		cout << obj[i] << endl;
	}

	cout <<"Max Elem: "<< obj.Max() << "\n";
	cout << "Sum of Elems: " << obj.Sum() << "\n";
	cout << "Sort ascending (press 1), or Sort descending (press 2)";
	int value = 0;
	cin >> value;
	if (value == 1)
	{
		obj.SortAscending();
		cout << "Sort ascending" << endl;
		for (int i=0; i<obj.GetSize(); i++)
		{
			cout << obj[i] << endl;
		}
	}

	if (value == 2)
	{
		obj.SortDescending();
		cout << "Sort descending" << endl;
		for (int i=0; i<obj.GetSize(); i++)
		{
			cout << obj[i] << endl;
		}
	}
_getch();
return 0;
}
//---------------------------------------------------------------------------
kolobuch вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
vector, find. "binary '==': no operator found which takes a left-hand operand of type ..." TwiX Общие вопросы C/C++ 7 30.08.2011 20:49
Ошибка Could not find a match for 'Pos(TStringStream *,const char *)' bulldog5293 C/C++ Сетевое программирование 1 09.04.2011 12:19
перегрузка & operator+= prc Общие вопросы C/C++ 2 24.03.2011 17:51
Перегрузка operator [] XuMuK Общие вопросы C/C++ 2 22.02.2011 13:12
ошибка: no match for ‘operator<<’ in ‘std::operator<< [with _Traits = std::char_traits<char> Critter Общие вопросы C/C++ 5 08.08.2010 23:38