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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.05.2017, 16:28   #1
Aoizora
Заблокирован
 
Регистрация: 11.11.2016
Сообщений: 261
По умолчанию Шаблонная friend функция swap шаблонного класса

Я хочу реализовать оператор присваивания копированием в своем классе при помощи техники copy and swap. Мой класс шаблонный, и поэтому возникли проблемы с определением функции swap. Сейчас у меня есть такой код:

Код:
template <typename TData>
class CArray;

template <typename TData>
void swap(CArray<TData> & _left, CArray<TData> _right);

template <typename TData>
class CArray
{
public:
	CArray();
	CArray(const CArray& _array);
	~CArray();
	CArray & operator=(CArray _other);
	friend void swap(CArray & _left, CArray & _right);
};
И такая шаблонная функция swap:

Код:
template <typename TData>
inline void swap(CArray<TData> & _left, CArray<TData> & _right)
{
	using std::swap;
	swap(_left.elements, _right.elements);
	swap(_left.first_free, _right.first_free);
	swap(_left.cap, _right.cap);
}
При компиляции всего этого я получал две ошибки в зависимости от попыток решить проблему: ambiguous call функции swap и unresolved symbol swap. Что я делаю не так?
Aoizora вне форума Ответить с цитированием
Старый 19.05.2017, 16:34   #2
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,330
По умолчанию

Цитата:
Сообщение от Aoizora Посмотреть сообщение
ambiguous call функции swap
Нормальные компиляторы еще говорят в чем именно неоднозначность вызова.

Цитата:
Сообщение от Aoizora Посмотреть сообщение
unresolved symbol swap
Похоже у вас функция swap задефинирована в cpp файле. Перенесите в hpp файл.

В чем сакральный смысл делать свою swap функцию именно для массива? Я бы сделал swap методом класса CArray.
waleri вне форума Ответить с цитированием
Старый 19.05.2017, 16:36   #3
Aoizora
Заблокирован
 
Регистрация: 11.11.2016
Сообщений: 261
По умолчанию

Нет, у меня все определено в хедере.
Aoizora вне форума Ответить с цитированием
Старый 19.05.2017, 17:14   #4
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,330
По умолчанию

Цитата:
Сообщение от Aoizora Посмотреть сообщение
void swap(CArray<TData> & _left, CArray<TData> _right);
Цитата:
Сообщение от Aoizora Посмотреть сообщение
inline void swap(CArray<TData> & _left, CArray<TData> & _right)
Лишний/опущенный &
waleri вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Шаблонная функция Friezi Помощь студентам 1 20.05.2013 22:34
Шаблонная функция bujlka Общие вопросы C/C++ 4 04.12.2012 13:38
Шаблонная функция bujlka Помощь студентам 2 02.12.2012 15:43
шаблонная функция zhenya.ya Помощь студентам 23 26.02.2011 17:40
SWAP функция moon-guest Общие вопросы C/C++ 4 14.11.2010 18:17