Форум программистов, компьютерный форум CyberForum.ru

Перегрузка && - C++

Войти
Регистрация
Восстановить пароль
 
alexsvk
8 / 8 / 1
Регистрация: 15.07.2010
Сообщений: 255
17.05.2011, 20:34     Перегрузка && #1
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#pragma once
class Fuzzy
{
public:
    enum logic {FALSE, TRUE, MAYBE = -1};
public:
    Fuzzy(logic);
    ~Fuzzy();
 
    logic getValue() const;
    void setValue(logic);
 
        friend logic operator&&(const Fuzzy&, const Fuzzy&);
...
};
Описание ошибки:
Cannot overload functions distinguished only by return value
Для оператора && существуют особые правила?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.05.2011, 20:34     Перегрузка &&
Посмотрите здесь:

C++ Где используются логические операторы && и ||
перегрузка & operator+= C++
C++ Изменение формата данных && работа с файлом
Перегрузка операции & C++
В программе объявлена переменная int x=1; определить значение выражения х>0 && x<1 ? 10/x : 10*x C++
Как проверить, принадлежит ли символ заданному диапазону m...n, кроме if (c <= n && c >= m) ? C++
Почему в выражении нельзя использовать запятую вместо && C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
17.05.2011, 21:35     Перегрузка && #2
Цитата Сообщение от alexsvk Посмотреть сообщение
Для оператора && существуют особые правила?
Avoid overloading short-circuiting operators: x || y or x && y.
да, его нельзя перегружать
alexsvk
8 / 8 / 1
Регистрация: 15.07.2010
Сообщений: 255
17.05.2011, 22:03  [ТС]     Перегрузка && #3
Цитата Сообщение от alex_x_x Посмотреть сообщение
да, его нельзя перегружать
Если Вы употребляете "нельзя", то оно относится только к следующим:
:: разрешение области видимости
. выбор члена
.* выбор члена через указатель на член
?: тернарный оператор
Veyron
 Аватар для Veyron
105 / 105 / 4
Регистрация: 02.06.2009
Сообщений: 579
17.05.2011, 22:07     Перегрузка && #4
Укажи как тип не logic, а bool
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
17.05.2011, 22:13     Перегрузка && #5
C++
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
enum logic {FALSE, TRUE, MAYBE = -1};
 
class Fuzzy;
 
logic operator&&(const Fuzzy&, const Fuzzy&)
{
   return FALSE;
}
 
class Fuzzy
{
public:
        
public:
        Fuzzy(logic);
        ~Fuzzy();
 
        logic getValue() const;
        void setValue(logic);
 
        friend logic operator&&(const Fuzzy&, const Fuzzy&);
};
 
int main()
{
  Fuzzy(FALSE) && Fuzzy(TRUE);
}
alexsvk
8 / 8 / 1
Регистрация: 15.07.2010
Сообщений: 255
18.05.2011, 14:20  [ТС]     Перегрузка && #6
Цитата Сообщение от alex_x_x Посмотреть сообщение
C++
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
enum logic {FALSE, TRUE, MAYBE = -1};
 
class Fuzzy;
 
logic operator&&(const Fuzzy&, const Fuzzy&)
{
   return FALSE;
}
 
class Fuzzy
{
public:
        
public:
        Fuzzy(logic);
        ~Fuzzy();
 
        logic getValue() const;
        void setValue(logic);
 
        friend logic operator&&(const Fuzzy&, const Fuzzy&);
};
 
int main()
{
  Fuzzy(FALSE) && Fuzzy(TRUE);
}
Ошибка компоновки:
1>stdafx.obj : error LNK2005: "enum logic __cdecl operator&&(class Fuzzy const &,class Fuzzy const &)" (??V@YA?AW4logic@@ABVFuzzy@@0@Z) already defined in 2_29.obj
Если из main убрать строки, связанные с этим оператором, то всё отлично собирается.

Интересно, что при определении енумерации внутри класса, сразу идёт ошибочка, о которой я говорил в самом начале темы.
Если же определить енумерацию вне описание класса, то всё отлично собирается.
gooseim
Эксперт С++
508 / 412 / 37
Регистрация: 23.09.2010
Сообщений: 1,159
18.05.2011, 14:34     Перегрузка && #7
Ошибка у вас сейчас в том, что logic operator&&(const Fuzzy&, const Fuzzy&) определен в хедере, который используют сразу несколько файлов. Надо вынести определение в cpp.
alexsvk
8 / 8 / 1
Регистрация: 15.07.2010
Сообщений: 255
18.05.2011, 14:48  [ТС]     Перегрузка && #8
C++
1
friend logic operator&&(const Fuzzy&, const Fuzzy&);
Есть ошибка при наведении, но при запуске нет даже предупреждения.
При наведении: cannot overload function distinguished only by type alone
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.05.2011, 16:05     Перегрузка &&
Еще ссылки по теме:

Нюансы синтаксиса: где, как и для чего используется && C++
C++ Напишите цикл, эквивалентный приведенному выше циклу, не пользуясь операторами && и ||
C++ Strcpy_s выдает ошибку L Buffer is too small & & 0
C++ Перегрузка operator T&
C++ Вызвать функцию базового класса с ссылочным квалификатором &&

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
18.05.2011, 16:05     Перегрузка && #9
alexsvk, rly?

C++
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
28
29
enum logic {FALSE, TRUE, MAYBE = -1};
 
class Fuzzy;
 
logic operator&&(const Fuzzy&, const Fuzzy&)
{
   return FALSE;
}
 
class Fuzzy
{
public:
        
public:
        Fuzzy(logic){}
        ~Fuzzy(){}
 
        logic getValue() const{return FALSE;}
        void setValue(logic){}
 
        friend logic operator&&(const Fuzzy&, const Fuzzy&);
};
 
 
 
int main()
{
  Fuzzy(FALSE) && Fuzzy(TRUE);
}
http://codepad.org/zi7KYcq1
Yandex
Объявления
18.05.2011, 16:05     Перегрузка &&
Ответ Создать тему
Опции темы

Текущее время: 03:20. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru