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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.05.2013, 21:09   #1
Dima-War
Форумчанин
 
Регистрация: 17.03.2012
Сообщений: 105
По умолчанию Перегрузка функции

Добрый день. Пытаюсь перегрузить функцию в классе, выдает вот такую ошибку: cannot overload functions distinguished by return type alone. Пытался убрать спецификатор friend, но ошибка, видимо, не из-за него. Подскажите, пожалуйста, что не так.

Код:
class Alpha
{
private:
	int A1;
	int A2;
public:
	friend Alpha equal(Alpha, Beta);
	friend Beta equal(Alpha, Beta);
};

class Beta
{
private:
	int B1;
	int B2;
public:
	friend Alpha equal(Alpha, Beta);
	friend Beta equal(Alpha, Beta);
};
Dima-War вне форума Ответить с цитированием
Старый 27.05.2013, 21:10   #2
Dima-War
Форумчанин
 
Регистрация: 17.03.2012
Сообщений: 105
По умолчанию

Решил проблему, поменяв местами аргументы функции.
----------------
Не совсем решил.. Когда пытаюсь присвоить значения класса Beta значениям класса Alpha пишет ошибку, что B1 и B2 inaccessible.

Код:
Alpha equal(Alpha a, Beta b)
{
	a.A1 = b.B1;
	a.A2 = b.B2;
}

Последний раз редактировалось Dima-War; 27.05.2013 в 21:13.
Dima-War вне форума Ответить с цитированием
Старый 27.05.2013, 21:35   #3
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

Тип возвращаемого значения не является частью сигнатуры функции, поэтому компилятор не может различить две функции с одним и тем же именем и одним и тем же списком аргументов, и отличающиеся только возвращаемым значением. То есть вы делаете что-то совершенно не предусмотренное стандартом языка.

Впрочем, я толком даже не понял, чего вы хотите добиться? Опишите, для чего нужны эти функции, для чего вам их перегружать и какие-нибудь примеры использования.
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Старый 27.05.2013, 22:03   #4
Dima-War
Форумчанин
 
Регистрация: 17.03.2012
Сообщений: 105
По умолчанию

В общем то я хочу написать 2 функции. Первая из них объекту класса Alpha присваивает значение объекта класса Beta и возвращает Alpha. Вторая функция объекту класса Beta присваивает значение объекта класса Alpha и возвращает Beta. Вопрос в том, почему даже с дружественной функцией нету доступа к полям разных классов.
---------
Все. Нашел все свои ошибки.

Последний раз редактировалось Dima-War; 27.05.2013 в 22:26.
Dima-War вне форума Ответить с цитированием
Старый 27.05.2013, 22:23   #5
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Код:
class Beta;

class Alpha
{
private:
	int A1;
	int A2;
public:
	friend Alpha equal(Alpha, Beta);
	friend Beta equal(Beta, Alpha);
};

class Beta
{
private:
	int B1;
	int B2;
public:
	friend Alpha equal(Alpha, Beta);
	friend Beta equal(Beta, Alpha);
};

Alpha equal(Alpha a, Beta b)
{
	a.A1 = b.B1;
	a.A2 = b.B2;
    return a;
}
Beta equal(Beta a, Alpha b)
{
	a.B1 = b.A1;
	a.B2 = b.A2;
    return a;
}
Оно?
Abstraction вне форума Ответить с цитированием
Старый 27.05.2013, 22:27   #6
Dima-War
Форумчанин
 
Регистрация: 17.03.2012
Сообщений: 105
По умолчанию

Да, оно, спасибо
Dima-War вне форума Ответить с цитированием
Старый 27.05.2013, 22:44   #7
Dima-War
Форумчанин
 
Регистрация: 17.03.2012
Сообщений: 105
По умолчанию

Хотя все же не все... Когда я вставляю такую вот строку, мне выдает следующую ошибку: 'operator =' must be a member function. Членом какой функции он должен быть? (Почему то если вместо = поставить +, то этой ошибки нету).

Код:
friend Alpha operator =(Beta);
Dima-War вне форума Ответить с цитированием
Старый 27.05.2013, 22:53   #8
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,289
По умолчанию

Потому что оператор присваивания строго функция класса и не может быть френдовым.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 27.05.2013, 22:56   #9
Dima-War
Форумчанин
 
Регистрация: 17.03.2012
Сообщений: 105
По умолчанию

Все, вроде вопросов больше нет. Еще раз спасибо
Dima-War вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перегрузка функции ViktorKozlov Общие вопросы C/C++ 5 23.03.2013 09:40
Перегрузка функции С++ Косиус Помощь студентам 3 21.03.2013 23:07
перегрузка функции.. YaDenis Помощь студентам 0 10.01.2013 23:56
Перегрузка функции.С++ jagger Помощь студентам 8 11.11.2010 22:27
Перегрузка функции в С++ Vultar Помощь студентам 7 19.11.2009 13:12