Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
anapshy
255 / 236 / 199
Регистрация: 14.11.2016
Сообщений: 890
Завершенные тесты: 3
1

Operator вывода и string

07.04.2017, 19:50. Просмотров 784. Ответов 6
Метки нет (Все метки)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
/*
 err - строка содержащая текст ошибки (по-умолчанию пустая)
 A.l;A.x;A.r - числа double
 Т.е. если я пытаюсь вывести объект и его строка не содержит ошибку, то выводится -> ( ... ; ... ; ... )
 Если строка содержит текст ошибки, то выводится -> текст ошибки
 Как Я понимаю os << A.err мы вывели текст, значит строку можно очистить...
 ..(чтоб избежать копирования строки при приравнивании объектов)
 A.err.clear() - Visual Studio ругается:
Ошибка C2662
void std::basic_string<char,std::char_traits<char>,std::allocator<char>>::clear(void) noexcept: невозможно преобразовать указатель "this" из "const std::string" в "std::basic_string<char,std::char_traits<char>,std::allocator<char>> &"  
*/
ostream& operator <<(ostream& os, const NNN &A) {
    if(A.err.empty()) os << "(" << fixed << cout.precision(2) << A.l << ";" << A.x << ";" << A.r << ")";
    else {
        os << A.err;
                //A.err.clear();
    }
    return os;
}
0
Лучшие ответы (1)
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.04.2017, 19:50
Ответы с готовыми решениями:

Перегрузить operator<<() для шаблонного класса (перегрузка оператора вывода)
Здравствуйте. Перегружаю оператор вывода для шаблонного класса. using namespace std; template...

Ошибка при использовании перегруженного оператора вывода в поток: no match for 'operator<<'
Пытаюсь написать класс комплексных чисел, но не могу сделать вот что: #include &lt;iostream&gt;...

No match for 'operator<' (operand types are 'std::__cxx11::string {aka std::__c
Имеем следующий код: #include &lt;iostream&gt; #include &lt;string&gt; #include &lt;vector&gt; #include...

Class & operator's |Error: undefined reference to operator
Компилирует нормально, но когда хочу использовать оператор выдает ошибку:undefined reference to...

Функция для вывода массива string
И снова здравствуйте! Я создаю функцию list, которая должна выводить массив переменных string,...

6
TheCalligrapher
С чаем беда...
Эксперт CЭксперт С++
5269 / 2645 / 725
Регистрация: 18.10.2014
Сообщений: 4,656
07.04.2017, 19:52 2
Лучший ответ Сообщение было отмечено anapshy как решение

Решение

Цитата Сообщение от anapshy Посмотреть сообщение
Как Я понимаю os << A.err мы вывели текст, значит строку можно очистить...
Объект A внутри << доступен как константный. В константном объекте ничего нельзя очистить.
1
GbaLog-
Любитель чаепитий
3198 / 1499 / 472
Регистрация: 24.08.2014
Сообщений: 5,263
Записей в блоге: 1
Завершенные тесты: 2
07.04.2017, 19:53 3
ну ты передаёшь константный объект в функцию, функция clear у std::string не константная, т.к. изменяет данные экземпляра класса, что непонятного?
1
anapshy
255 / 236 / 199
Регистрация: 14.11.2016
Сообщений: 890
Завершенные тесты: 3
07.04.2017, 20:09  [ТС] 4
TheCalligrapher, GbaLog-,

Добавлено через 5 минут
GbaLog-, TheCalligrapher, убрал const
C++
1
2
3
    Ошибка  LNK2019
 
ссылка на неразрешенный внешний символ "class std::basic_ostream<char,struct std::char_traits<char> > & __cdecl operator<<(class std::basic_ostream<char,struct std::char_traits<char> > &,class FazzyNumber const &)" (??6@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@std@@AAV01@ABVFazzyNumber@@@Z) в функции _main
0
TheCalligrapher
С чаем беда...
Эксперт CЭксперт С++
5269 / 2645 / 725
Регистрация: 18.10.2014
Сообщений: 4,656
07.04.2017, 20:43 5
Цитата Сообщение от anapshy Посмотреть сообщение
убрал const
В одном месте убрал, в другом - не убрал...
0
anapshy
255 / 236 / 199
Регистрация: 14.11.2016
Сообщений: 890
Завершенные тесты: 3
07.04.2017, 22:40  [ТС] 6
TheCalligrapher, везде убрано.
fazzynum.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#pragma once
#include <iostream>
#include <string>
using namespace std;
 
class FazzyNumber {
private:
    double l, x, r;
    string err;
public:
    // ...
    FazzyNumber(string a) : err(a) {};
    // ...
    friend ostream&    operator <<(ostream& os, FazzyNumber &A);
   // ....
};
fazzynum.cpp
C++
1
2
3
4
5
6
7
8
9
#include "fazzynum.h"
ostream& operator <<(ostream& os, FazzyNumber &A) {
    if(A.err.empty()) os << "(" << A.l << ";" << A.x << ";" << A.r << ")";
    else {
        os << A.err;
        A.err.clear();
    }
    return os;
}
0
TheCalligrapher
С чаем беда...
Эксперт CЭксперт С++
5269 / 2645 / 725
Регистрация: 18.10.2014
Сообщений: 4,656
07.04.2017, 22:59 7
Цитата Сообщение от anapshy Посмотреть сообщение
везде убрано.
Ну так и ошибки в таком случае нет. Ошибка у вас была, когда во friend-объявлении все равно оставался const. Это хорошо видно по сообщению об ошибке.
0
07.04.2017, 22:59
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.04.2017, 22:59

operator char() или operator int()
Здорова госпдо! Снова ничо не ясно как всегда. Разбираю программку из книги Страуструпа, там он...

Вызов operator[] через operator[] const
Перелистывал Майерса, наткнулся на код, подскажите пожалуйста почему он советует закомментированный...

Перегрузка operator>> и operator<< в абстрактном классе
Здрасьте! Есть необходимость перегрузить потоки, Я знаю как это сделать через friend, но вот...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

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