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

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

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

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

17.05.2011, 20:34. Просмотров 696. Ответов 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
Для оператора && существуют особые правила?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.05.2011, 20:34
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Перегрузка && (C++):

Ошибка: multiple definition of `void std::swap<A>(A&amp;, A&amp;) - C++
Хочу специализировать swap для своего класса. Получаю ошибку. Вот код:#ifndef A_H #define A_H #include &lt;string&gt; class A { ...

Почему friend ostrem& operator <<(ostream& outs, const Rational&); - invalid function declaration? - C++
Пытаюсь скомпилировать программу пишет friend ostrem&amp; operator &lt;&lt;(ostream&amp; outs, const Rational&amp;); - invalid function declaration. ...

В заштрихованную фигуру бросают точки с координатами x и y. Получить координаты первой точки не попавшей в эту область (фигура x*x+y*y<25&&x*x+y*y>=9& - C++
В заштрихованную фигуру бросают точки с координатами x и y. Получить координаты первой точки не попавшей в эту область (фигура...

ostream &operator<< (ostream &output, const Array &obj) - что означает эта строка? - C++
void Array::getArray() // вывод массива { for (int ix = 0; ix &lt; size; ix++) cout &lt;&lt; setw(5) &lt;&lt; ptr; // вывод элементов...

Порядок вычисления: операторы «|» и «||», «&» и «&&» - C++
В Java булевые операторы «|» и «||», и «&amp;» и «&amp;&amp;» отличаются друг от друга порядком вычеслений, а в C++ так же как и в Java или...

Friend ostream& operator<<(ostream& stream, CArr& obj); - C++
CArr.h #pragma once class CArr{ int* arr = nullptr; int size = 10; void swap(int *a, int *b); void swap(int &amp;a, int &amp;b); ...

8
alex_x_x
бжни
2447 / 1652 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
17.05.2011, 21:35 #2
Цитата Сообщение от alexsvk Посмотреть сообщение
Для оператора && существуют особые правила?
Avoid overloading short-circuiting operators: x || y or x && y.
да, его нельзя перегружать
0
alexsvk
8 / 8 / 1
Регистрация: 15.07.2010
Сообщений: 255
17.05.2011, 22:03  [ТС] #3
Цитата Сообщение от alex_x_x Посмотреть сообщение
да, его нельзя перегружать
Если Вы употребляете "нельзя", то оно относится только к следующим:
:: разрешение области видимости
. выбор члена
.* выбор члена через указатель на член
?: тернарный оператор
0
Veyron
106 / 106 / 4
Регистрация: 02.06.2009
Сообщений: 579
17.05.2011, 22:07 #4
Укажи как тип не logic, а bool
0
alex_x_x
бжни
2447 / 1652 / 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);
}
0
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 убрать строки, связанные с этим оператором, то всё отлично собирается.

Интересно, что при определении енумерации внутри класса, сразу идёт ошибочка, о которой я говорил в самом начале темы.
Если же определить енумерацию вне описание класса, то всё отлично собирается.
0
gooseim
Эксперт С++
508 / 412 / 37
Регистрация: 23.09.2010
Сообщений: 1,159
18.05.2011, 14:34 #7
Ошибка у вас сейчас в том, что logic operator&&(const Fuzzy&, const Fuzzy&) определен в хедере, который используют сразу несколько файлов. Надо вынести определение в cpp.
1
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
0
alex_x_x
бжни
2447 / 1652 / 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
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.05.2011, 16:05
Привет! Вот еще темы с ответами:

Выделение памяти для буффера, под std::istream& operator>>(std::istream &, String &) - C++
Добрый день. Как осуществляется выделения памяти под перегруженный оператор ввода данных в пользовательский тип? Ведь мы заранее не можем...

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

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

Перегрузка операции & - C++
Необходимо создать перегрузку операции &quot;и&quot; для ввода вывода составляющих объекта. Объект состоит из двух переменных типа int. Заранее...


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

Или воспользуйтесь поиском по форуму:
9
Yandex
Объявления
18.05.2011, 16:05
Ответ Создать тему
Опции темы

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