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

Ошибка C2678 бинарный "=": не найден оператор, принимающий левый операнд типа "const Time"

20.05.2022, 08:09. Показов 664. Ответов 2
Метки нет (Все метки)

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

C++
1
2
3
4
5
bool operator==(const Time& t1, const Time& t2)
{
    if (t1.min == t2.min && t1.sec == t2.sec)return true;
    return false;
}
Но теперь выдает "бинарный "=": не найден оператор, принимающий левый операнд типа "const Time". Мне по заданию необходимо реализовать алгоритмы удаления (remove_if), поиска (find_if), for_each, sort и т.д. Но на удалении с помощью remove_if сразу же встрял, что не так?

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
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
#include <set>
#include <iostream>
#include <algorithm>
#include "Time.h"
typedef multiset <Time> smultiset;
Time s;
 
smultiset make_multiset(int n)
{
    Time a;
    smultiset v;
    for (int i = 0; i < n; i++)
    {
        cin >> a;
        v.insert(a);
    }
    return v;
}
 
void print_list(smultiset v)
{
    multiset <Time>::iterator it;
    for (it = v.begin(); it != v.end(); it++)
        cout << (*it) << endl;
    cout << endl;
}
 
struct Greater_s
{
    bool operator()(Time t)
    {
        if (t > s) return true; else return false;
    }
};
 
 
struct Equal_s
{
    bool operator()(Time t)
    {
        return t == s;
    }
};
 
int main()
{
    int n;
    cout << "N?";
    cin >> n;
    smultiset v;
    v = make_multiset(n);
    print_list(v);
 
    multiset <Time> ::iterator it;
 
    //-------------Удаление элемента по ключу-------------
    cout << "Kakoj element nuzhno udalit'? = " << endl;
    cin >> s;
 
    it= remove_if(v.begin(), v.end(), Equal_s());
    v.erase(it, v.end());
    print_list(v);
    //----------------------------------------------------------------------------
 
}
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);
    friend bool operator==(const Time& t1, const Time& t2);
    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
#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 operator==(const Time& t1, const Time& t2)
{
    if (t1.min == t2.min && t1.sec == t2.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;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
20.05.2022, 08:09
Ответы с готовыми решениями:

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; ...

Error C2678: бинарный "<<": не найден оператор, принимающий левый операнд типа "std::ifstream"
Собственно, текст ошибки приведен в названии темы. Сам код: #include &quot;stdafx.h&quot; #include...

Исправить ошибку:error C2678: бинарный ">>": не найден оператор, принимающий левый операнд типа "std::istream"
Скажите пожалуйста, как исправить error C2678: бинарный &quot;&gt;&gt;&quot;: не найден оператор, принимающий...

error C2678: бинарный ">>": не найден оператор, принимающий левый операнд типа "std::basic_istream<_Elem,_Traits>"
Нужно из файла скачать информацию в объект. Почему у меня не получается? #include &lt;vector&gt;...

2
Вездепух
Эксперт CЭксперт С++
12807 / 6680 / 1799
Регистрация: 18.10.2014
Сообщений: 16,915
20.05.2022, 09:14 2
Цитата Сообщение от dirup Посмотреть сообщение
о теперь выдает "бинарный "=": не найден оператор, принимающий левый операнд типа "const Time".
В какой строке? Почему в вопросе не указана строка?

Цитата Сообщение от dirup Посмотреть сообщение
it= remove_if(v.begin(), v.end(), Equal_s());
К std::multiset невозможно применить std::remove_if.

Начиная с С++20 у std::multiset есть метод erase_if, который удаляет элементы по условию.
0
0 / 0 / 0
Регистрация: 05.08.2021
Сообщений: 204
02.07.2023, 21:43 3
У меня та же ошибка. Вот код программы
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
/*использование fscek( ) для печати содержимого файла */
#include <iostream>
#include <fstream>
using namespace std;
 
int fscek(int number, char* names[])
{
    ifstream fp;
    long offset = 0;
    if (number < 2)
        cout << "Not enough arguments were passed." << endl;
    else
    {
        fp.open(names[1], ios::in);
        if (!fp)
            cout << "Could not open file " << names[1] << endl;
        else
        {
            while (fp.seekg(offset++, ios::beg) == 0)
                cout << (char)fp.get();
            fp.close();
        }
    }
    return 0;
}
. Возникла на 19 строчке.

Добавлено через 33 минуты
Та же ситуация в строчке 22 следующего кода:
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
/*использование fscek( ) для печати содержимого файла */
#include <iostream>
#include <fstream>
using namespace std;
 
int main(int number, char* names[]) 
{
    ifstream fp;
    long offset = 0L;
    if (number < 2)
    {
        cout << " Мне нужно имя файла в качестве аргумента." << endl;
    }
    else 
    {
        if (fp.open(names[1], ios::in) == 0)
        {
            cout << " Я не могу открыть " << names[1] << endl;
        }
        else
        {
            while (fp.seekg(offset++, ios::beg) == 0)
            {
                cout << (char)fp.get();
                if (fp.seekg(-(offset + 3), ios::end) == 0) 
                {
                    cout << (char)fp.get();
                }
            }
            fp.close();
        }
    }
    return 0;
}
0
02.07.2023, 21:43
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
02.07.2023, 21:43
Помогаю со студенческими работами здесь

бинарный "<": не найден оператор, принимающий левый операнд типа "const _Ty" (или приемлемое преобразование отсутствует)
Здравствуйте, пытаюсь добавить элементы в контейнер set, но выходит ошибка, не могу понять в чем...

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

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

Ошибка C2679: бинарный '=': не найден оператор, принимающий правый операнд типа 'double'
// ConsoleApplication2.cpp : Defines the entry point for the console application. // #include...

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


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Как переместить последние коммиты в новую ветку (branch) в Git
InfoMaster 20.01.2025
При работе над проектом часто возникают ситуации, когда необходимо изолировать определенные изменения от основной линии разработки. Это может быть связано с экспериментальными функциями, исправлением. . .
Как вернуть результат из асинхронной функции в JavaScript
InfoMaster 20.01.2025
Асинхронное программирование представляет собой фундаментальную концепцию в JavaScript, которая позволяет выполнять длительные операции без блокировки основного потока выполнения программы. В. . .
Какой локальный веб-сервер выбрать
InfoMaster 19.01.2025
В современной веб-разработке локальные веб-серверы играют ключевую роль, предоставляя разработчикам надежную среду для создания, тестирования и отладки веб-приложений без необходимости использования. . .
Почему планшеты и iPad уже не так популярны, как раньше
InfoMaster 19.01.2025
Эра революционных инноваций История планшетных компьютеров началась задолго до того, как эти устройства стали привычными спутниками нашей повседневной жизни. В начале 1990-х годов появились первые. . .
Как самому прошить BIOS ноутбука
InfoMaster 19.01.2025
BIOS (Basic Input/ Output System) представляет собой важнейший компонент любого компьютера или ноутбука, который обеспечивает базовое взаимодействие между аппаратным и программным обеспечением. . .
Какой Linux выбрать для домашнего компьютера
InfoMaster 19.01.2025
Современные реалии выбора операционной системы В современном мире выбор операционной системы для домашнего компьютера становится все более важным решением, которое может существенно повлиять на. . .
Как объединить два словаря одним выражением в Python
InfoMaster 19.01.2025
В мире программирования на Python работа со словарями является неотъемлемой частью разработки. Словари представляют собой мощный инструмент для хранения и обработки данных в формате "ключ-значение". . . .
Как без исключения проверить существование файла в Python
InfoMaster 19.01.2025
При разработке программного обеспечения на Python часто возникает необходимость проверить существование файла перед выполнением операций с ним. Это критически важная задача, которая помогает избежать. . .
Как определить, содержит ли строка подстроку в JavaScript
InfoMaster 19.01.2025
При разработке веб-приложений часто возникает необходимость выполнять различные операции со строками, среди которых особое место занимает поиск подстрок. JavaScript предоставляет несколько встроенных. . .
Что такое метаклассы в Python
InfoMaster 19.01.2025
Метаклассы в Python представляют собой один из самых мощных и одновременно сложных механизмов языка, позволяющий программистам контролировать процесс создания классов. По своей сути, метакласс. . .
Как удалить свойство из объекта JavaScript
InfoMaster 19.01.2025
В современной веб-разработке объекты JavaScript играют фундаментальную роль в организации и структурировании данных. Они представляют собой контейнеры, которые хранят связанные данные и. . .
Какая разница между String и string в C#
InfoMaster 19.01.2025
В языке программирования C# существует интересная особенность: для работы со строками можно использовать как String, так и string. Эта двойственность часто вызывает вопросы у разработчиков, особенно. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru