Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
Труд вопреки насмешкам
288 / 165 / 40
Регистрация: 13.07.2017
Сообщений: 3,000
Записей в блоге: 8
1

Ошибки при вынесении operator== за структуру

07.09.2018, 09:38. Показов 1110. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
В одной из соседних тем woldemas посоветовал написать оператор == за структурой для сравнения std::vector, привязанных к этой структуре, но если это сделать, компилятор начинает ругаться. Например:
C++
1
2
3
4
5
6
7
8
9
10
public struct three_values {
public:
    std::string string;
    three_values(std::string new_string) {}
    std::string to_string() {}
    operator std::string() {}
};
bool operator==(const three_values _Left, const three_values _Right) {
    return (_Left.to_string() == _Right.to_string());
}
Ошибка компиляции:
1>d:\***\three_values.h(409): error C2662: std::string three_values::to_string(void): невозможно преобразовать указатель "this" из "const three_values" в "three_values &"
1>d:\***\three_values.h(409): note: В результате преобразования теряются квалификаторы
Написать просто _Left.string вместо _Left.to_string() нельзя. Кто знает, как это исправить?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.09.2018, 09:38
Ответы с готовыми решениями:

При вынесении кода в отдельную функцию выдает ошибки
Здравствуйте, подскажите пожалуйсто где я тут что неправильно написал. Код работает если поставить...

Синтаксические ошибки при компиляции программы на структуру
#include <iostream> #include <string.h> #define n 4; using namespace std; struct OIL{ char...

При вынесении определения всегда ли нужно указывать функцию как inline явно?
Бьярни пишет class char_stack { int size; char* top; char* s; public: ...

Индексация в operator[] через структуру
class type{ //... } struct point{ int i, j; } class A{ private: type*** data;...

6
672 / 475 / 215
Регистрация: 06.09.2013
Сообщений: 1,306
07.09.2018, 09:43 2
Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
woldemas посоветовал написать оператор == за структурой
Я такого не советовал. Не надо инсинуаций.
0
Труд вопреки насмешкам
288 / 165 / 40
Регистрация: 13.07.2017
Сообщений: 3,000
Записей в блоге: 8
07.09.2018, 09:44  [ТС] 3
Но вы же выкладывали такой код... Ладно, простите, не злитесь на меня. Не можете помочь?
0
672 / 475 / 215
Регистрация: 06.09.2013
Сообщений: 1,306
07.09.2018, 09:46 4
Лучший ответ Сообщение было отмечено Etyuhibosecyu как решение

Решение

чтобы скомпилировать ваш код нужно добавить const к to_string
C++
1
std::string to_string() const {    }
И в оператор по ссылке передавайте заодно уж:
C++
1
2
3
bool operator==(const three_values &_Left, const three_values &_Right) {
    return (_Left.to_string() == _Right.to_string());
}
1
309 / 221 / 74
Регистрация: 23.05.2011
Сообщений: 981
07.09.2018, 09:57 5
Etyuhibosecyu, суть в том, что твой метод to_string неконстантный, то есть, имеющий право изменять объект.
Из-за этого его нельзя вызывать у константных объектов.
0
Труд вопреки насмешкам
288 / 165 / 40
Регистрация: 13.07.2017
Сообщений: 3,000
Записей в блоге: 8
07.09.2018, 10:05  [ТС] 6
Теперь ругается на сравнение std::string и const char *, которое к моей структуре не имеет никакого отношения...
C++
1
2
3
std::string a;
const char *b;
if (a == b)
Ошибка на скриншоте.
Миниатюры
Ошибки при вынесении operator== за структуру  
0
139 / 67 / 46
Регистрация: 15.10.2015
Сообщений: 308
07.09.2018, 12:46 7
Etyuhibosecyu, Оно?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
class three_values {
private:
    std::string string;
public:
    three_values(const std::string & new_string) {}
    std::string to_string() { return string; }
    friend bool operator == (const three_values & lhs, const three_values & rhs);
};
 
bool operator == (const three_values & lhs, const three_values & rhs) 
{
    return lhs.string == rhs.string;
}
0
07.09.2018, 12:46
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.09.2018, 12:46
Помогаю со студенческими работами здесь

Ссылки при вынесении ядра каталога
Здравствуйте! Помогите, пожалуйста… Установила MODX с вынесением ядра за пределы корневой...

Ошибка при вынесении исключения "System.FormatException" в MessageBox
Всем привет! Подскажите пожалуйста. Возникла проблема с вынесением ошибки "System.FormatException"...

Visual Studio выдаёт ошибку при вынесении объявления функции с template в .h файл. Без template всё работает
Проект содержит три файла: Source.cpp, arrTreat.h, arrTreat.cpp. Source.cpp: #include...

Ошибки Undeclared identifier: 'Edit1', Missing operator or semicolon
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics,...


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

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