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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
alexsvk
8 / 8 / 1
Регистрация: 15.07.2010
Сообщений: 255
#1

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

17.05.2011, 20:34. Просмотров 679. Ответов 8
Метки нет (Все метки)

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++
Необходимо создать перегрузку операции "и" для ввода вывода составляющих объекта. Объект состоит из двух переменных типа int. Заранее...

перегрузка & operator+= - C++
Изучая C++, наткнулся в одном из упражнений на такое выражение: Port & operator+=(int b). Зная, что x+=y можно представить как x = x...

Перегрузка operator T& - C++
Почему не срабатывает перегруженный оператор T& ?template <typename T> struct Test { T value_; operator T&() { return...

Объясните почему не срабатывает И (&&) - C++
Есть задача нахождения наибольшего общего делителя для двух чисел. Программу я написал.Но почему когда я указывал в цикле И (&&), цикл...

Не работает gettimeofday(&tv1, &tz); - C++
#include <iostream> //#include <сtime> #include <time.h> #include <windows.h> #include <math.h> using namespace std; const...

условие if (x && y && z ) - C++
День добрый. подскажите что не так: if(norcub() && nevk() && norok()) { cout<<"Условие не выполнено.\n"; count=30; } // эти 3...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alex_x_x
бжни
2445 / 1650 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
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
106 / 106 / 4
Регистрация: 02.06.2009
Сообщений: 579
17.05.2011, 22:07     Перегрузка && #4
Укажи как тип не logic, а bool
alex_x_x
бжни
2445 / 1650 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
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     Перегрузка &&
Еще ссылки по теме:

FindFirstFile&&FindNextFile - C++
Работаю в Visual Studio 2010. Есть такой код: void print_diffs() { WIN32_FIND_DATA fd; HANDLE Handle; ...

class && constructor - C++
День добрый! Создаю кое-что для кое-чего, но внезапно столкнулся с такой проблемой... Прототип моего класса имеет вид: ... public: ...

Что значат && и || - C++
Вроде бы результат кода один и тот же первый код #include <stdio.h> #define MAX_STRING_SIZE 20 int main() { FILE *pFile;...

C++ 11 конструктор переноса && - C++
Кто-нибудь может мне пояснить или дать ссылку на информацию о rvalue reference на русском языке, а то на английском что-то не всё могу...


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

Или воспользуйтесь поиском по форуму:
alex_x_x
бжни
2445 / 1650 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
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     Перегрузка &&
Ответ Создать тему
Опции темы

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