powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Перегрузка операторов.
3 сообщений из 3, страница 1 из 1
Перегрузка операторов.
    #38516959
Фотография psih-stalker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброе время суток! С прошедшим Новым Годом!
Имеется шаблон класса:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
template<class type>
class array {
		std::vector<type> Elements;
	public
		{...}
		int Length();
		{...}
		//здесь сравнивается размер массива с числом
		bool operator ==(int); 
		friend bool operator ==(int, array<type>);
		{...} //здесь тоже перегружены операторы
};

template<class type>
int array<type>::Length() {
	return Elements.size();
}

template<class type>
bool array<type>::operator ==(int a) {
	return Length() == a;
}

template<class type>
bool operator ==(int a, array<type> b) {
	return a == b.Length();
}



и код вызова (пока просто разбираюсь с перегрузкой операторов, поэтому никакого смысла в коде нет):

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
array<int> a, b;
Randomize();
int count = Random(20) + 10;
//здесь идет заполнение массивов
for (int i = 0; i < count; i++) {
	//эти операторы тоже перегружены и работают на ура. 
	b += i; //добавляет в массив i
	a += b; //добавляет в массив все элементы другого массива
	a--; //удаляет последний элемент массива
	for (int j = 0; j < a.Length(); j++)
		if (j != i) f << a.Element(j) << " "; //здесь вывод в файл
	f << '\n' << b.Element(i) << '\n'; //здесь вывод в файл
}
bool s1 = a == a.Length(); //работает на ура
bool s2 = a.Length() == a; //не хочет работать



Первый оператор с одним параметром работает на ура, а вот второй не хочет. Пишет:
Messages[ilink32 Error] Error: Unresolved external 'operator ==(int, array<int>)' referenced from ...\WIN32\DEBUG\UNITMAIN.OBJ

Сделать оператор членом класса не получается, ибо:
Messages[bcc32 Error] Algorithmic.h(35): E2080 'operator array<type>::==(int,array<type>)' must be declared with one parameter

Пробовал объявить:
Код: plaintext
1.
bool operator ==(int, array<int>); 


И все работает. Но неужели нельзя сделать, чтобы было по шаблону, а не на каждый тип делать это (чего я делать не буду)?
Как сделать это работающим?
Заранее спасибо!
...
Рейтинг: 0 / 0
Перегрузка операторов.
    #38517117
Mozok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
psih-stalker,

Код: plaintext
1.
friend bool operator ==(int, array<type>);

- это, на самом деле, объявление нешаблонной внешней функции.
psih-stalkerКак сделать это работающим?
Вот неплохой забор .
...
Рейтинг: 0 / 0
Перегрузка операторов.
    #38517358
Фотография psih-stalker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mozok,

Спасибо! Помогло.
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Перегрузка операторов.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]