С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.66/29: Рейтинг темы: голосов - 29, средняя оценка - 4.66
1 / 1 / 1
Регистрация: 09.02.2018
Сообщений: 127

Ошибка binary '=' : no operator found which takes a right-hand operand of type

06.09.2019, 22:07. Показов 6649. Ответов 20
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Ошибка Erro1 error C2679: binary '=' : no operator found which takes
a right-hand operand of type 'const printDevice'
Пытаюсь сделать массив обьектов класса,при запуске выдает эту ошибку.

Вот код
Advertising.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#pragma once
#include <iostream>
#include <queue>
#include <vector>
#include "printDevice.h"
using namespace std;
class Advertising
{
    private:
    queue<printDevice> advers;
public:
    Advertising();
    void addReklama(printDevice);
    void removeReklama();
    vector<printDevice> getAdvertising(); //Когда убераю эту строку и реализацию в cpp программа запускается
    ~Advertising();
};
Advertising.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
#include "Advertising.h"
 
 Advertising::Advertising()
{
}
 
 
void Advertising::addReklama(printDevice adver)
{
    advers.push(adver);
}
 
void Advertising::removeReklama()
{
    advers.pop();
}
vector<printDevice> Advertising::getAdvertising() // Реализация
{
    vector<printDevice> vectorAdvertising;
    queue<printDevice> savedAdvertising = advers;
    while (!advers.empty()) {
        vectorAdvertising.push_back(advers.front());
        advers.pop();
    }
    advers = savedAdvertising;
    return vectorAdvertising;
}
 
Advertising::~Advertising()
{
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
06.09.2019, 22:07
Ответы с готовыми решениями:

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

Binary '==' no operator found which takes a left-hand operand of type 'T'
Здравствуйте. Пытаюсь сравнить элемент массива с объектом,который я создаю в мейн и компилятор ругается...

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

20
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
07.09.2019, 00:10
gordon8899, тебе нужно реализовать конструктор копирования и оператор присваивания для printDevice
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12931 / 6799 / 1820
Регистрация: 18.10.2014
Сообщений: 17,210
07.09.2019, 01:17
Цитата Сообщение от gordon8899 Посмотреть сообщение
Пытаюсь сделать массив обьектов класса,при запуске выдает эту ошибку.
Компилятор говорит вам, что у вашего printDevice нет оператора присваивания.

В чем ваш вопрос?
0
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,885
Записей в блоге: 1
07.09.2019, 07:11
Цитата Сообщение от gordon8899 Посмотреть сообщение
vector<printDevice> getAdvertising();
а тут случайно не most vexing parse?
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12931 / 6799 / 1820
Регистрация: 18.10.2014
Сообщений: 17,210
07.09.2019, 11:18
Цитата Сообщение от _stanislav Посмотреть сообщение
а тут случайно не most vexing parse?
Здесь нет никакой неоднозначности, а значит нет и most vexing parse.

Да даже если бы и был, все равно most vexing parse разрешился бы в пользу объявления функции. А автор-то как раз и хотел получить объявление функции.
0
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,885
Записей в блоге: 1
07.09.2019, 12:14
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Здесь нет никакой неоднозначности, а значит нет и most vexing parse.
да, я не заметил, с утра по раньше мне показалось что это создание объекта в теле функции.
0
1 / 1 / 1
Регистрация: 09.02.2018
Сообщений: 127
07.09.2019, 12:15  [ТС]
НУ вот я сделал,но все равно ошибка
printDevice.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
#include "Device.h"
#include<istream>
#include<iostream>
#include<string>
#include <algorithm>
 using namespace std;
 #pragma once
class printDevice : public Device
{
 
protected:
    
    int diagonal;
    std::string quality;
 
public:
    printDevice(string str = "0", int x = 0, int y = 0, int dia = 0, string qua = "0") : Device(str, x, y)
    {
        this -> diagonal = dia;
        this -> quality  = qua;
    }
    
    printDevice(const printDevice&);
    printDevice & operator=(printDevice &dev);
   void operator () (const char*, int, int, int,  const char*);
    friend std::istream & operator>>(std::istream &is, printDevice&);
    friend std::ostream & operator << (std::ostream&, printDevice&);
    ~printDevice() {}
};
printDevice.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
#include "printDevice.h"
#include <fstream>
#include<istream>
#include<iostream>
#include<string>
#include <iostream>
#include <algorithm>
 
 printDevice & printDevice::operator=(printDevice &dev)
{
    if (this != &dev) {
        this ->interface=dev.interface;
        this ->power=dev.power;
        this ->weight = dev.weight;
        this -> diagonal=dev.diagonal;
    this -> quality=dev.quality;
    }
    return dev;
}
 printDevice::printDevice(const printDevice& print)
{
    this ->interface=print.interface;
        this ->power=print.power;
        this ->weight = print.weight;
        this -> diagonal=print.diagonal;
    this -> quality=print.quality;
}
void printDevice::operator () (const char *str, int x, int y, int dia, const char *qual)
{
    this -> interface = str;
    this -> power     = x;
    this -> weight    = y;
    this -> diagonal  = dia;
    this -> quality   = qual;
}
 std::istream & operator>>(std::istream &is, printDevice &dev)
{
   
        cout<<"Enter Interface: ";
        cin>>dev.interface;
        cout<<"Enter power: ";
        cin>>dev.power;
        cout<<"Enter weight: ";
        cin>>dev.weight;
        cout<<"Enter diagonal: ";
        cin>>dev.diagonal;
        cout<<"Enter quality: ";
        cin>>dev.quality;
         return is;
}
std::ostream& operator << (std::ostream &os, printDevice &dev)
{
    return os<< "Interface: "<< dev.interface <<std::endl
             << "Power: "    << dev.power     <<std::endl
             << "Weight: "   << dev.weight    <<std::endl
             << "Diagonal: " << dev.diagonal  <<std::endl
             << "Quality: "  << dev.quality   <<std::endl;
}
0
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,885
Записей в блоге: 1
07.09.2019, 12:45
gordon8899, покажи код где используешь оператор.
0
1 / 1 / 1
Регистрация: 09.02.2018
Сообщений: 127
07.09.2019, 13:02  [ТС]
_stanislav, Оператор присваивания где использую?Нигде,я просто хочу создать обьект типа PrintDevice
0
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,885
Записей в блоге: 1
07.09.2019, 13:06
Цитата Сообщение от gordon8899 Посмотреть сообщение
Нигде,я просто хочу создать обьект типа PrintDevice
можно посмотреть код?
0
1 / 1 / 1
Регистрация: 09.02.2018
Сообщений: 127
07.09.2019, 13:10  [ТС]
main.h
C++
1
2
3
4
5
6
#pragma once
ref class main
{
public:
    main(void);
};
main.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include "main.h"
#include "Device.h"
#include "printDevice.h"
#include "Advertising.h"
using namespace std;
main::main(void)
{
}
int main()
{
    printDevice a;
    cin>>a;
    cout<<a;
    system("pause");
    return 0;
}
Добавлено через 1 минуту
Вот еще базовый класс
Device.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
31
#include <iostream>
#include <cstring>
 #include <fstream>
#include<istream>
#include<iostream>
#include<string>
#pragma once
using namespace std;
class Device
{
protected:
    std::string interface;
    int power;
    int weight;
public:
 virtual void setPower(); 
    void output_interface() { std::cout<<interface<<std::endl; }
    void output_power()     { std::cout<<power<<std::endl;     }
    void output_weight()    { std::cout<<weight<<std::endl;    }
 
    void input_interface();
    void input_power();
    void input_weight();
 
   void  operator()(const char *, int, int);
    Device & operator=(Device &dev);
    friend std::istream & operator>>(std::istream &is, Device &dev);
    friend std::ostream & operator<<(std::ostream &os, Device &dev);
    Device(std::string str = "0", int x = 0, int y = 0): interface(str), power(x), weight(y) {}
    ~Device() {}
};
Device.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
#include "Device.h"
#include <fstream>
#include<istream>
#include<iostream>
#include<string>
#include <cstdlib>
#include <vector>
using namespace std;
 
void Device::input_interface()
{
    std::cout<<"Enter the device interface: ";
    getline(std::cin, interface);
}
 
void Device::input_power()
{
    std::cout<<"Enter the device power: ";
    std::cin>>power;
}
 
void Device::input_weight()
{
    std::cout<<"Enter the device weigth: ";
    std::cin>>weight;
}
   void Device::setPower() {
        cout << "Enter power: " << endl;
        cin >> power;
    }
void Device::operator()(const char *str, int x, int y)
{
    interface = str;
    power     = x;
    weight    = y;
    
}
 
Device & Device::operator=(Device &dev)
{
    if (this != &dev) {
        interface = dev.interface;
        power     = dev.power;
        weight    = dev.weight;
    }
    return dev;
}
 
std::istream & operator>>(std::istream &is, Device &dev)
{
    return is>>dev.interface>>dev.power>>dev.weight;
}
 
std::ostream & operator<<(std::ostream &os, Device &dev)
{
    return os<<"Interface: "<<dev.interface<<std::endl
                 <<"Power: "    <<dev.power<<std::endl
                 <<"Weight: "   <<dev.weight<<std::endl;
}
0
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,885
Записей в блоге: 1
07.09.2019, 13:20
gordon8899, я не поленился собрал твой код, все нормально, только вот этот непонятный ref удалил и #include "Advertising.h" закоментил
C++
1
2
3
4
5
6
#pragma once
class main
{
public:
    main(void);
};
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include "main.h"
#include "Device.h"
#include "printDevice.h"
// #include "Advertising.h"
using namespace std;
main::main(void)
{
}
int main()
{
    printDevice a;
    cin>>a;
    cout<<a;
    system("pause");
    return 0;
}
0
1 / 1 / 1
Регистрация: 09.02.2018
Сообщений: 127
07.09.2019, 13:28  [ТС]
У вас работает мой код?,я тоже самое сделал,все равно нет
0
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,885
Записей в блоге: 1
07.09.2019, 13:34
Цитата Сообщение от gordon8899 Посмотреть сообщение
У вас работает мой код?
смотри
Миниатюры
Ошибка binary '=' : no operator found which takes a right-hand operand of type  
0
1 / 1 / 1
Регистрация: 09.02.2018
Сообщений: 127
07.09.2019, 13:50  [ТС]
Странно,у меня есть второй проект где тоже работает,но там нету связи между printDevice и Device классом,когда пишу в printDevice.h
C++
1
class printDevice:public Device{
Вылезает опять эта ошибка
0
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,885
Записей в блоге: 1
07.09.2019, 13:56
Цитата Сообщение от gordon8899 Посмотреть сообщение
Вылезает опять эта ошибка
какая ошибка?
0
1 / 1 / 1
Регистрация: 09.02.2018
Сообщений: 127
07.09.2019, 14:07  [ТС]
Error 1 error C2679: binary '=' : no operator found which takes a right-hand operand of type 'const printDevice' (or there is no acceptable conversion)

вот эта

Добавлено через 7 минут
Может эта ошибка из-за того что нужно передать обьект в конструктор копирования Device класса?

Добавлено через 3 минуты
Может это от версии VS зависит?У меня 10
0
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,885
Записей в блоге: 1
07.09.2019, 14:21
Цитата Сообщение от gordon8899 Посмотреть сообщение
Может это от версии VS зависит?У меня 10
хз, твой проект у меня собрался, значит дело не в коде, либо ты что то мудришь и не договариваешь. попробуй все что можно переустановить у себя, снеси операционку поставь винду 10 и студию 2019. но ты наверное сейчас скажешь что у тебя ком древний)). переустанови тогда то что есть.
0
1 / 1 / 1
Регистрация: 09.02.2018
Сообщений: 127
07.09.2019, 15:34  [ТС]
Да нет,комп не древний,я уже исправил ошибку поменял кое-что,спасибо
0
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,885
Записей в блоге: 1
07.09.2019, 15:42
Цитата Сообщение от gordon8899 Посмотреть сообщение
я уже исправил ошибку
какой ты молодец!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
07.09.2019, 15:42
Помогаю со студенческими работами здесь

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

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

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

No operator found which takes a right-hand operand
Кто подскажет в чем ошибка? #include &lt;iostream&gt; #include &lt;vector&gt; class LongNumber { public:

Ошибка: "binary '=' no operator found which takes a right-hand operand"
Добрый день. Пытаюсь функцией вернуть массив byte. Пишу так: STDMETHODIMP CCLASS::function(VARIANT* Value) { byte abc = { 0x34,...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru