Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Nikcharn
71 / 53 / 3
Регистрация: 31.07.2009
Сообщений: 149
#1

No operator found which takes a right-hand operand - C++

15.11.2013, 08:57. Просмотров 779. Ответов 19
Метки нет (Все метки)

Кто подскажет в чем ошибка?

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
136
137
138
139
140
141
142
143
144
145
146
147
148
#include <iostream>
#include <vector>
 
class LongNumber
{
public:
    
    LongNumber()
    {
    }
 
    LongNumber(std::vector <int> a)
    {
        box.resize(a.size());
        for (int i = 0; i < a.size(); i++)
        {
            box[i] = a[i];
        }
    }
 
    void pushBack(int number)
    {
        box.push_back(number);
    }
 
    int getSize()
    {
        return box.size();
    }
 
    int getNumber(int pos)
    {
        return box[pos];
    }
    
    void reverseUp()
    {
        int condition = box.size() / 2;
        int glass, last = box.size() - 1;
 
        for (int i = 0; i < condition; i++)
        {
            glass = box[i];
            box[i] = box[last - i];
            box[last - i] = glass;
        }
    }
 
    void reverseBack()
    {
        int condition = box.size() / 2;
        int glass, last = box.size() - 1;
 
        for (int i = 0; i < condition; i++)
        {
            glass = box[i];
            box[i] = box[last - i];
            box[last - i] = glass;
        }
    }
 
    void print()
    {
        int pos = 0;
        
        while (!box[pos])
        {
            pos++;
        }
        
        for (int i = pos; i < box.size(); i++)
        {
            std::cout << box[i];
        }
    }
 
    LongNumber operator* (LongNumber & obj)
    {
        int length = box.size() + obj.getSize() + 1;
        std::vector <int> c;
        c.resize(length);
 
        for (int i = 0; i < box.size(); i++)
        {
            for (int j = 0; j < obj.getSize(); j++)
            {
                c[i + j] += box[i] * obj.getNumber(j);
            }
        }
 
        for (int i = 0; i < c.size() - 1; i++)
        {
            c[i+1] +=  c[i] / 10;
            c[i] =  c[i] % 10;
        }
        
        int last = c.size() - 1;
 
        while (!c[last])
            last--;
        c.resize(last + 1);
        return LongNumber(c);
    }
 
    LongNumber &operator= (LongNumber &obj)
    {
 
        box.resize(obj.getSize());
 
        for (int i = 0; i < obj.getSize(); i++)
        {
            box[i] = obj.getNumber(i);
        }
 
        return *this;
    }
 
private:
    std::vector <int> box;
};
 
int main()
{
    int k;
    std::cin >> k;
    
    LongNumber a, b, c;
    a.pushBack(5);
    a.pushBack(5);
    b.pushBack(3);
    b.pushBack(6);
    c.pushBack(1);
 
    a.reverseUp();
    b.reverseUp();
 
    for (int i = 0; i < k - 1; i++ )
    {
        c = c * a;
    }
    
    c = c * b;
 
    c.reverseBack();
    c.print();
    
    
}
error C2679: binary '=' : no operator found which takes a right-hand operand of type 'LongNumber' (or there is no acceptable conversion)
fd738c-suxzyq(105): could be 'LongNumber LongNumber::operator =(LongNumber &)'
while trying to match the argument list '(LongNumber, LongNumber)'
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.11.2013, 08:57
Здравствуйте! Я подобрал для вас темы с ответами на вопрос No operator found which takes a right-hand operand (C++):

Error C2679: binary '>>': no operator found which takes a right-hand operand of type - C++
нужно написать программу обработки структур. в программе использовать структуру, содержащую поля с информацией об учащихся: - фамилия и...

Ошибка: error C2679: binary '<<' : no operator found which takes a right-hand operand of type - C++
Нужно создать класс List для представления простого списка. Подскажите, почему появляется такая ошибка: error C2679: binary '&lt;&lt;' : no...

no operator found which takes a right/left-hand operand of type "AR" - C++
Нашел на форуме исходник программы, собрал, но выдает ошибку описанную выше #include &lt;iostream&gt; #include &lt;conio.h&gt; #include...

Ошибка "binary '==': no operator found which takes a left-hand operand of type" - C++
while (currentNode != endNode) { nextNode = path; nextNode1 = path; takeRoute.x = nextNode; ...

Исправить ошибку "error C2679: binary '*' : no operator found which takes a right-hand operand of type" - C++
matiza.h #pragma once template &lt;typename N&gt; class matriza { protected: int stroka; N *mas; public: matriza()

Проверить правильность кода. Вылезает Error 5 error C2679: binary '<<' : no operator found which takes a right - C++
Компилятор ругается на ошибку Error 5 error C2679: binary '&lt;&lt;' : no operator found which takes a right-hand operand of type 'Kniga' ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
zss
Модератор
Эксперт С++
6382 / 5947 / 1927
Регистрация: 18.12.2011
Сообщений: 15,264
Завершенные тесты: 1
15.11.2013, 09:00 #2
Для класса LongNumber Вам нужен метод
LongNumber& operator =(LongNumber &);
т.е. возвращающий ссылку на LongNumber
Исправьте строку 106 приведенного кода.
0
Nikcharn
71 / 53 / 3
Регистрация: 31.07.2009
Сообщений: 149
15.11.2013, 09:04  [ТС] #3
Цитата Сообщение от zss Посмотреть сообщение
Для класса LongNumber Вам нужен метод
LongNumber& operator =(LongNumber &);
т.е. возвращающий ссылку на LongNumber
А чем этот не подходит?
C++
1
2
3
4
5
6
7
8
9
10
11
12
LongNumber &operator= (LongNumber &obj)
    {
 
        box.resize(obj.getSize());
 
        for (int i = 0; i < obj.getSize(); i++)
        {
            box[i] = obj.getNumber(i);
        }
 
        return *this;
    }
0
zss
Модератор
Эксперт С++
6382 / 5947 / 1927
Регистрация: 18.12.2011
Сообщений: 15,264
Завершенные тесты: 1
15.11.2013, 09:13 #4
Так должно работать.
Во всяком случае VS 2008 компилирует без ошибок.
0
Nikcharn
71 / 53 / 3
Регистрация: 31.07.2009
Сообщений: 149
15.11.2013, 09:16  [ТС] #5
Цитата Сообщение от zss Посмотреть сообщение
Так должно работать.
Во всяком случае VS 2008 компилирует без ошибок.
У меня тоже все работает, но на сайте не проходит почему то из за этой ошибки, там кстати 2010 стоит Visual Studio.
http://acm.timus.ru/problem.aspx?space=1&num=1206

А у меня 2012. Может у кого то есть 2010 и он запустит?
0
zss
Модератор
Эксперт С++
6382 / 5947 / 1927
Регистрация: 18.12.2011
Сообщений: 15,264
Завершенные тесты: 1
15.11.2013, 09:19 #6
А попробуйте убрать ссылку!
0
Nikcharn
71 / 53 / 3
Регистрация: 31.07.2009
Сообщений: 149
15.11.2013, 09:23  [ТС] #7
Цитата Сообщение от zss Посмотреть сообщение
А попробуйте убрать ссылку!
Попробовал, та же ошибка, но без ссылки:
error C2679: binary '=' : no operator found which takes a right-hand operand of type 'LongNumber' (or there is no acceptable conversion)
iadtgn-ux8wko(105): could be 'LongNumber LongNumber::operator =(LongNumber &)'
while trying to match the argument list '(LongNumber, LongNumber)'
0
zss
Модератор
Эксперт С++
6382 / 5947 / 1927
Регистрация: 18.12.2011
Сообщений: 15,264
Завершенные тесты: 1
15.11.2013, 09:46 #8
Цитата Сообщение от Nikcharn Посмотреть сообщение
argument list '(LongNumber, LongNumber)'
Похоже, компилятору почему-то приспичило operator= считать глобальной
функцией, принимающей 2 параметра типа LongNumber.
Попробуйте!
0
Nikcharn
71 / 53 / 3
Регистрация: 31.07.2009
Сообщений: 149
15.11.2013, 14:29  [ТС] #9
Цитата Сообщение от zss Посмотреть сообщение
Похоже, компилятору почему-то приспичило operator= считать глобальной
функцией, принимающей 2 параметра типа LongNumber.
Попробуйте!
А что попробовать?
0
Tulosba
:)
Эксперт С++
4396 / 3239 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
15.11.2013, 14:30 #10
Nikcharn, operator= должен принимать const T&. Для этого придется еще методы getNumber() и getSize() сделать константными.
0
Nikcharn
71 / 53 / 3
Регистрация: 31.07.2009
Сообщений: 149
15.11.2013, 14:36  [ТС] #11
Цитата Сообщение от Tulosba Посмотреть сообщение
Nikcharn, operator= должен принимать const T&. Для этого придется еще методы getNumber() и getSize() сделать константными.
А можете объяснить почему именно константными?
0
Tulosba
:)
Эксперт С++
4396 / 3239 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
15.11.2013, 14:44 #12
Цитата Сообщение от Nikcharn Посмотреть сообщение
А можете объяснить почему именно константными?
Потому что для константного объекта можно вызывать только константные методы.
0
Nikcharn
71 / 53 / 3
Регистрация: 31.07.2009
Сообщений: 149
15.11.2013, 15:27  [ТС] #13
Цитата Сообщение от Tulosba Посмотреть сообщение
Потому что для константного объекта можно вызывать только константные методы.
К сожалению та же ошибка.
0
Tulosba
:)
Эксперт С++
4396 / 3239 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
15.11.2013, 15:33 #14
Nikcharn, http://ideone.com/EughRa
1
Nikcharn
71 / 53 / 3
Регистрация: 31.07.2009
Сообщений: 149
15.11.2013, 15:59  [ТС] #15
Цитата Сообщение от Tulosba Посмотреть сообщение
Ваше, исправление дает ту же самую ошибку.
По-моему тут дело в чем то другом, но блин в голову ничего не лезет.
Сейчас склоняюсь к тому, что может убрать эту перегрузку оператора.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.11.2013, 15:59
Привет! Вот еще темы с ответами:

right-hand operand - C++
#include &lt;iostream&gt; #include &lt;cmath&gt; #include &lt;ctime&gt; using namespace std; const int n=3; template&lt;class T&gt;T after_C(T *m,int...

Ошибка в коде "no match for 'operator[]' (operand types are 'Student' and 'int')" - C++
Помогите пожалуйста разобраться, в чём проблема? Весь код: #include &quot;windows.h&quot; #include &lt;stdio.h&gt; #include &lt;string.h&gt; #include...

Ошибка на "cout <<" no match for operator operand types are std::basic_ostream char - C++
Немного слов про код.Данный код создан для выдачи номера машины,цвета,марки при предоставлении имени.Знаю,что код можно было написать проще...

Error: ambiguous overload for 'operator<<' (operand types are 'std::ofstream {aka std::basic_ofstream<char>}' - C++
на #define LOG(Variable) Log&lt;&lt;&quot;&lt;&quot;;...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
15.11.2013, 15:59
Ответ Создать тему
Опции темы

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