Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ При запуске скомпилированной программы, выскакивает и тут же пропадает консольное окно https://www.cyberforum.ru/ cpp-beginners/ thread629759.html
Добрый вечер. Вот такая вот проблема. Появляется консольное окошко и тут же исчезает. Я помню можно было батник создать, в него что-то вписать, и через него всё запустится. Неподскажете, что именно...
C++ Удаление нулевой(-ых) строчки и столбца из матрицы
Доброго времени суток! Помогите написать программу, которая проверяла бы матрицу на нулевую строчку и столбец, и, если таковые присутствуют, удаляла бы их.Поясню: из матрицы 1 0 4 0 0 0 3 0 5...
Оператор xor C++
Всем добрый вечер.Чем отличаются следующие выражения: (a || b) && !(a && b); и (a^b);
C++ Лафоре задача по классам Задача из книги лафоре по классам №7: нужно написать программу используя классы для ввода и вывода координат, кроме того нужно написать конструктор который будет принимать 3 аргумента и написать... https://www.cyberforum.ru/ cpp-beginners/ thread629686.html
C++ Не удается найти ошибку https://www.cyberforum.ru/ cpp-beginners/ thread629656.html
Линкер ругается (2001) на не разрешенный внешний символ, гуглил но не втыкнул из-за чего конкретно он выдает эту ошибку.Вот код: //заголовок #ifndef SAVINGSACCOUNT_H #define SAVINGSACCOUNT_H ...
Таймеры C++
Здравствуйте, скажите какие есть готовые таймеры? Пользовался поиском, нашел только winapi и простую библиотеку time.h, только почему то используя функцию clock() у меня выводится результат = 0...
C++ Применение
Возможно вы посчитаете данный вопрос глупым. Но я его задам. Где можно применять C++ и C программисту, при этом не используя GUI? И возможно-ли потом к определенной программе без GUI прикрутить...
C++ Автоматическое выведение типа У С. Прата встретил вот такой непонятный код const double *f2(const double arr, int n) { return arr; } int main() { auto p2 = f2; // Автоматическое выведение типа С++11 https://www.cyberforum.ru/ cpp-beginners/ thread629639.html
C++ Дробные числа https://www.cyberforum.ru/ cpp-beginners/ thread629636.html
Дpoбныe числa oкpyглить дo 2 знaкoв пoслe зaпятoй как это можно сделать. к примеру число 23.333 его нужно округлить до 2 знаков или 23.69954
C++ Спецификатор доступа и виртуальные функции Как я понимаю, спецификатор доступа задается только в том классе, где функция объявляется виртуальной? Получается во время исполнения не проверяется спецификатор доступа? Ну вот например код: ... https://www.cyberforum.ru/ cpp-beginners/ thread629633.html
8 / 8 / 1
Регистрация: 30.06.2011
Сообщений: 250
0

E2094 'operator<<' not implemented in type 'ostream' for arguments of type 'Binary'

27.07.2012, 22:01. Просмотров 5282. Ответов 14
Метки (Все метки)

Здравствуйте, уважаемые форумчане, выкидываю код:
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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
#include <iostream>
#include <string>
#include <windows.h>
 
class Binary
{
        public:
    Binary(const Binary& b = "");
    Binary& operator=(const Binary& b);
    Binary(const char*      b);
    Binary& operator +=(const Binary& b);
    Binary& operator -=(const Binary& b);
    friend ostream& operator <<(std::ostream& s, Binary& b)
    { return std::cout << b.data;}
    friend std::istream& operator >>(std::istream& s, Binary& b)
    { return std::cin  >> b.data;}
        private:
    std::string data;
};
 
Binary operator +(const Binary& a, const Binary& b);
Binary operator -(const Binary& a, const Binary& b);
 
Binary::Binary(const char *b)
{
        data = b;
}
 
Binary::Binary(const Binary &b)
{
        *this = b;
}
Binary& Binary::operator =(const Binary& b)
{
        data = b.data;
        return *this;
}
 
Binary& Binary::operator +=(const Binary& b)
{
        Binary t(b);                                    // Модифицировать не имеем право...
        // Определяем наиболее длинную строку и ту,
        // которая короче, дополняем справа нулями.
        std::string tmp(labs(data.length()-t.data.length()),'0');
        if(data.length() > t.data.length())
                t.data = tmp + t.data;
        else
                data = tmp + data;
 
        // Создаём два обратных итератора, т.к. двигаться будем
        // в обратном направлении. т.е. с конца строки в начало.
        std::string::reverse_iterator riData = data.rbegin();
        std::string::reverse_iterator riBData = t.data.rbegin();
        int c = 0;                                              // Флаг переноса.
        while(riData != data.rend())    // Двигаемся по строке с конца в начало.
        {
                int i1 = *riData - 0x30;        // Преобразовываем символы в числа.
                int i2 = *riBData - 0x30;       // !!! АКТУАЛЬНО ТОЛЬКО ДЛЯ ASCII !!!
                int res = i1 + i2 + c;          // Вот оно сложение.
                c  = (res & 2) >> 1;            // Корректируем флаг переноса
                res &= 1;                                       // После этого корректируем результат.
                *riData = res + 0x30;           // Записываем обратно, преобразовав обратно в символ
                riData++; riBData++;            // Двигаемся дальше...
        }
        if(c)                                                   // Если переполнение
                data = '1' + data;
        return *this;
}
 
Binary& Binary::operator -=(const Binary& b)
{
        Binary t(b);                                    // Модифицировать не имеем право...
        // Определяем наиболее длинную строку и ту,
        // которая короче, дополняем справа нулями.
        std::string tmp(labs(data.length()-t.data.length()),'0');
        if(data.length() > t.data.length())
                t.data = tmp + t.data;
        else
                data = tmp + data;
 
        // Создаём два обратных итератора, т.к. двигаться будем
        // в обратном направлении. т.е. с конца строки в начало.
        std::string::reverse_iterator riData = data.rbegin();
        std::string::reverse_iterator riBData = t.data.rbegin();
        int c = 0;                                              // Флаг переноса.
        while(riData != data.rend())    // Двигаемся по строке с конца в начало.
        {
                int i1 = *riData - 0x30;        // Преобразовываем символы в числа.
                int i2 = *riBData - 0x30;       // !!! АКТУАЛЬНО ТОЛЬКО ДЛЯ ASCII !!!
                int res = i1 - i2 - c;          // Вот оно вычитание.
                c  = (res & 2) >> 1;            // Корректируем флаг переноса
                res &= 1;                                       // После этого корректируем результат.
                *riData = res + 0x30;           // Записываем обратно, преобразовав обратно в символ
                riData++; riBData++;            // Двигаемся дальше...
        }
        if(c)                                                   // Если переполнение
                data = '1' + data;
        return *this;
}
 
// ----Утилиты класса----
// После опрелеленных функций +=,  -= и =
// функции сложения и вычитания определяются тривиально:
Binary operator +(const Binary& a, const Binary& b)
{
        Binary t = a;
        return t += b;
}
 
Binary operator -(const Binary& a, const Binary& b)
{
        Binary t = a;
        return t -= b;
}
 
 
int main()
{
    std::string mes = "Введите через пробел 3 двоичных чила: ";
    char res[100] ;
    CharToOem(mes.c_str(), res);
    std::cout << res;
 
    Binary a, b, c;
    std::cin >> a >> b >> c;
    std::cout   << "a = " << a << std::endl
                << "b = " << b << std::endl
                << "c = " << c << std::endl;
 
    std::cout   << "a + b + c = " << a + b + c << std::endl
                << "a + b - c = " << a + b - c << std::endl
                << "a - b + c = " << a - b + c << std::endl
                << "a - b - c = " << a - b - c << std::endl;
    return 0;
}
Ругается на это
[C++ Error] Unit1.cpp(130): E2094 'operator<<' not implemented in type 'ostream' for arguments of type 'Binary'
подскажите где ошибка и как исправить
заранее спасибо всем

Вернуться к обсуждению:
E2094 'operator<<' not implemented in type 'ostream' for arguments of type 'Binary'
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.07.2012, 22:01
Готовые ответы и решения:

Ошибка: E2093 operator '<' not implemented in type 'myString' for arguments of the same type
Пишет _function_base.h(73):E2093'operator&lt;'not implemented in type 'myString' for arguments of the...

С++ not implemented in type 'istream' for arguments of type 'float *'из-за чего эта ошибка и как исправить?
Написал программу для расчёта площади четырёхугольника и круга. Использовал простые операторы...

E2094 'operator>>' not implemented in type 'ostream' for arguments of type 'int'
Начал осваивать C++ по Дейтелу &quot;как программировать на с++&quot;. Пользуюсь Borland C++ Builder 6....

Ошибка: 'operator<<' not implemented in type 'istream' for arguments of type 'int'
Создаем самую простую прогу: int sgrt(int); #pragma argsused int main(int argc, char* argv) { ...

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