Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.87/15: Рейтинг темы: голосов - 15, средняя оценка - 4.87
0 / 0 / 0
Регистрация: 27.04.2020
Сообщений: 5
1

бинарный "<": не найден оператор, принимающий левый операнд типа "const _Ty" (или приемлемое преобразование отсутствует)

16.05.2022, 19:16. Показов 2960. Ответов 5
Метки set, с++ (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте, пытаюсь добавить элементы в контейнер set, но выходит ошибка, не могу понять в чем проблема.
main.cpp
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
#include <iostream>
#include <set>
#include "C:\Users\Dom\Desktop\Zadacha2\Time.h"
using namespace std;
typedef set<Time>st;
typedef set <Time>::iterator it;
 
st make_set(int n)
{
    st st;
    Time a;
    for (int i = 0; i < n; i++) {
        cin >> a;
        st.insert(a);
    }
    return st;
}
 
 
int main()
{
    st st; int n;
    cout << "Vvedite razmernost': "; cin >> n;
    st = make_set(n);
}

Time.h
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
30
pragma once
#include <iostream>
 
using namespace std;
class Time
{
    int min, sec;
public:
    Time() { min = 0; sec = 0; };
    Time(int m, int s) { min = m; sec = s; }
    Time(const Time& t) { min = t.min; sec = t.sec; }
    ~Time() {};
    int get_min() { return min; }
    int get_sec() { return sec; }
    void set_min(int m) { min = m; }
    void set_sec(int s) { sec = s; }
    //перегруженные операции
    Time& operator=(const Time&);
    Time operator+(const Time&);
    Time operator+=(const Time&);
    Time operator/(const Time&);
    Time operator/(const int&);
    bool operator >(const Time&);
    bool operator <(const Time&);
    bool operator==(const Time&);
    bool operator!=(const Time&);
    //глобальные функции ввода-вывода
    friend istream& operator>>(istream& in, Time& t);
    friend ostream& operator<<(ostream& out, const Time& t);
};

Time.cpp
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
#include "Time.h"
 
// перегрузка операции присваивания
Time & Time::operator=(const Time & t)
{
    //проверка на самоприсваивание
    if (&t == this) return *this;
    min = t.min;
    sec = t.sec;
    return *this;
}
 
//перегрузка глобальной функции-операции ввода
istream& operator>>(istream& in, Time& t)
{
    cout << "min?"; in >> t.min;
    cout << "sec?"; in >> t.sec;
    return in;
}
//перегрузка глобальной функции-операции вывода
ostream& operator<<(ostream& out, const Time& t)
{
    return (out << t.min << " : " << t.sec);
}
 
bool Time::operator==(const Time& t)
{
    if (min == t.min && sec == t.sec)return true;
    return false;
}
 
bool Time::operator!=(const Time& t)
{
    if (min != t.min || sec != t.sec)return true;
    return false;
}
 
bool Time::operator <(const Time& t)
{
    if (min > t.min)return true;
    if (min == t.min && sec > t.sec)return true;
    return false;
    
}
 
bool Time::operator >(const Time& t)
{
    if (min > t.min)return true;
    if (min == t.min && sec > t.sec)return true;
    return false;
}
 
Time Time::operator+(const Time& t)
{
    int temp1 = min * 60 + sec;
    int temp2 = t.min * 60 + t.sec;
    Time p;
    p.min = (temp1 + temp2) / 60;
    p.sec = (temp1 + temp2) % 60;
    return p;
}
 
Time Time::operator+=(const Time& t)
{
    int temp1 = min * 60 + sec;
    int temp2 = t.min * 60 + t.sec;
    Time p;
    p.min = (temp1 + temp2) / 60;
    p.sec = (temp1 + temp2) % 60;
    return p;
}
 
//перегрузка бинарной операции деления
Time Time::operator/(const Time& t)
{
    int temp1 = min * 60 + sec;
    int temp2 = t.min * 60 + t.sec;
    Time p;
    p.min = (temp1 / temp2) / 60;
    p.sec = (temp1 / temp2) % 60;
    return p;
}
Time Time::operator/(const int& t)
{
    int temp1 = min * 60 + sec;
    Time p;
    p.min = (temp1 / t) / 60;
    p.sec = (temp1 / t) % 60;
    return p;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.05.2022, 19:16
Ответы с готовыми решениями:

binary "оператор": не найден оператор, принимающий правый операнд типа "тип" (или приемлемое преобразование отсутствует)
Выдаёт ошибку С2679: бинарный &quot;-&quot; не найден оператор, принимающий правый операнд типа...

Ошибка C2678 бинарный "=": не найден оператор, принимающий левый операнд типа "const Time"
Всем доброе утро, помогите, пожалуйста. Не понимаю в чем дело. Изначально была такая ошибка...

Error C2679: бинарный "<<": не найден оператор, принимающий правый операнд типа "std::string" (или приемлемое
эмулятор работы банкомата Например #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include...

Ошибка при создании массива (бинарный "=": не найден оператор, принимающий правый операнд типа "Vector" (или приемлемое)
Создал класс n-мерного вектора, нужно создать массив из 5 n-мерных векторов, при реализации...

Исправить ошибку: не найден оператор, принимающий левый операнд типа "const sf::Sprite" (SFML)
при компиляции бинарный &quot;&lt;&quot;: не найден оператор, принимающий левый операнд типа &quot;const sf::Sprite&quot;...

5
Модератор
Эксперт С++
13507 / 10757 / 6412
Регистрация: 18.12.2011
Сообщений: 28,712
16.05.2022, 19:21 2
Глобальная функция, объявление в классе:
C++
1
friend bool operator<(const Time& t1,const Time& t2);
C++
1
2
3
4
5
bool operator<(const Time& t1,const Time& t2)
{
    if (t1.min < t2.min || t1.min == t2.min && t1.sec < t2.sec)return true;
    return false;
}
0
0 / 0 / 0
Регистрация: 27.04.2020
Сообщений: 5
16.05.2022, 19:28  [ТС] 3
Не помогло, та же самая ошибка
0
Вездепух
Эксперт CЭксперт С++
11695 / 6374 / 1724
Регистрация: 18.10.2014
Сообщений: 16,067
16.05.2022, 19:53 4
Цитата Сообщение от netfeas Посмотреть сообщение
C++
1
bool operator <(const Time&);
Либо

C++
1
2
bool operator <(const Time&) const;
                             ^^^^^
либо (лучше) так, как указал zss.

Цитата Сообщение от netfeas Посмотреть сообщение
Не помогло, та же самая ошибка
Вы что-то выдумываете. Приводите код.

---

Цитата Сообщение от netfeas Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
bool Time::operator <(const Time& t)
{
    if (min > t.min)return true;
    if (min == t.min && sec > t.sec)return true;
    return false;
}
bool Time::operator >(const Time& t)
{
    if (min > t.min)return true;
    if (min == t.min && sec > t.sec)return true;
    return false;
}
Почему оба оператора определены одинаково? Для пущей замысловатости?
0
0 / 0 / 0
Регистрация: 27.04.2020
Сообщений: 5
16.05.2022, 20:02  [ТС] 5
TheCalligrapher,
Time.cpp
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
#include "Time.h"
 
// перегрузка операции присваивания
Time & Time::operator=(const Time & t)
{
    //проверка на самоприсваивание
    if (&t == this) return *this;
    min = t.min;
    sec = t.sec;
    return *this;
}
 
//перегрузка глобальной функции-операции ввода
istream& operator>>(istream& in, Time& t)
{
    cout << "min?"; in >> t.min;
    cout << "sec?"; in >> t.sec;
    return in;
}
//перегрузка глобальной функции-операции вывода
ostream& operator<<(ostream& out, const Time& t)
{
    return (out << t.min << " : " << t.sec);
}
 
bool Time::operator==(const Time& t)
{
    if (min == t.min && sec == t.sec)return true;
    return false;
}
 
bool Time::operator!=(const Time& t)
{
    if (min != t.min || sec != t.sec)return true;
    return false;
}
 
bool operator<(const Time& t1, const Time& t2)
{
    if (t1.min < t2.min || t1.min == t2.min && t1.sec < t2.sec)return true;
    return false;
}
 
bool Time::operator >(const Time& t)
{
    if (min < t.min)return true;
    if (min == t.min && sec < t.sec)return true;
    return false;
}
 
Time Time::operator+(const Time& t)
{
    int temp1 = min * 60 + sec;
    int temp2 = t.min * 60 + t.sec;
    Time p;
    p.min = (temp1 + temp2) / 60;
    p.sec = (temp1 + temp2) % 60;
    return p;
}
 
Time Time::operator+=(const Time& t)
{
    int temp1 = min * 60 + sec;
    int temp2 = t.min * 60 + t.sec;
    Time p;
    p.min = (temp1 + temp2) / 60;
    p.sec = (temp1 + temp2) % 60;
    return p;
}
 
//перегрузка бинарной операции деления
Time Time::operator/(const Time& t)
{
    int temp1 = min * 60 + sec;
    int temp2 = t.min * 60 + t.sec;
    Time p;
    p.min = (temp1 / temp2) / 60;
    p.sec = (temp1 / temp2) % 60;
    return p;
}
Time Time::operator/(const int& t)
{
    int temp1 = min * 60 + sec;
    Time p;
    p.min = (temp1 / t) / 60;
    p.sec = (temp1 / t) % 60;
    return p;
}
Time.h
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
30
#pragma once
#include <iostream>
 
using namespace std;
class Time
{
    int min, sec;
public:
    Time() { min = 0; sec = 0; };
    Time(int m, int s) { min = m; sec = s; }
    Time(const Time& t) { min = t.min; sec = t.sec; }
    ~Time() {};
    int get_min() { return min; }
    int get_sec() { return sec; }
    void set_min(int m) { min = m; }
    void set_sec(int s) { sec = s; }
    //перегруженные операции
    Time& operator=(const Time&);
    Time operator+(const Time&);
    Time operator+=(const Time&);
    Time operator/(const Time&);
    Time operator/(const int&);
    bool operator >(const Time&);
    friend bool operator<(const Time& t1, const Time& t2);
    bool operator==(const Time&);
    bool operator!=(const Time&);
    //глобальные функции ввода-вывода
    friend istream& operator>>(istream& in, Time& t);
    friend ostream& operator<<(ostream& out, const Time& t);
};
0
Вездепух
Эксперт CЭксперт С++
11695 / 6374 / 1724
Регистрация: 18.10.2014
Сообщений: 16,067
16.05.2022, 21:01 6
Цитата Сообщение от netfeas Посмотреть сообщение
Time.cpp
И? Теперь все прекрасно компилируется без проблем. Вы же нам рассказываете какие-то странные истории про

Цитата Сообщение от netfeas Посмотреть сообщение
Не помогло, та же самая ошибка
0
16.05.2022, 21:01
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.05.2022, 21:01
Помогаю со студенческими работами здесь

Ошибка: не найден оператор, принимающий левый операнд типа
class Cou { double x; double y; public: static Cou Rand() {... }

Не найден оператор, принимающий левый операнд типа std::basic_istream
вот в этом коде в 120 строчке ошибка error C2678: бинарный &quot;!=&quot;: не найден оператор, принимающий...

Ошибка: бинарный "<": не найден оператор, принимающий левый операнд типа "const _Ty" (или приемлемое преобразование
#include &quot;pch.h&quot; #include &quot;Class.h&quot; int GetInt() { char abc; int result = 0;...

Бинарный "+": не найден оператор, принимающий левый операнд типа "const_Ty" (или приемлемое преобразование отсутствует)
Работа с декой Есть два класса. В одном описан пользовательский тип данных В другом - работа...

C2678 бинарный ">>": не найден оператор, принимающий левый операнд типа "std::ostream"
Код: #include &lt;iostream&gt; #include &lt;memory&gt; #include &lt;typeinfo&gt; #include &lt;ctime&gt; #include...

Error C2678: бинарный ">>": не найден оператор, принимающий левый операнд типа "std::istream"
Вот ошибка 1&gt;------ Построение начато: проект: ыпошряоям, Конфигурация: Debug Win32 ------ 1&gt; ...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru