Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.67/15: Рейтинг темы: голосов - 15, средняя оценка - 4.67
1 / 1 / 1
Регистрация: 09.02.2018
Сообщений: 127
1

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

06.09.2019, 22:07. Показов 2908. Ответов 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
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.09.2019, 22:07
Ответы с готовыми решениями:

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

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
нужно написать программу обработки структур. в программе использовать структуру, содержащую поля с...

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

20
1360 / 997 / 316
Регистрация: 28.07.2012
Сообщений: 2,759
07.09.2019, 00:10 2
gordon8899, тебе нужно реализовать конструктор копирования и оператор присваивания для printDevice
0
С чаем беда...
Эксперт CЭксперт С++
9145 / 4664 / 1268
Регистрация: 18.10.2014
Сообщений: 10,518
07.09.2019, 01:17 3
Цитата Сообщение от gordon8899 Посмотреть сообщение
Пытаюсь сделать массив обьектов класса,при запуске выдает эту ошибку.
Компилятор говорит вам, что у вашего printDevice нет оператора присваивания.

В чем ваш вопрос?
0
Нарушитель
1486 / 1288 / 485
Регистрация: 16.08.2014
Сообщений: 5,415
Записей в блоге: 1
07.09.2019, 07:11 4
Цитата Сообщение от gordon8899 Посмотреть сообщение
vector<printDevice> getAdvertising();
а тут случайно не most vexing parse?
0
С чаем беда...
Эксперт CЭксперт С++
9145 / 4664 / 1268
Регистрация: 18.10.2014
Сообщений: 10,518
07.09.2019, 11:18 5
Цитата Сообщение от _stanislav Посмотреть сообщение
а тут случайно не most vexing parse?
Здесь нет никакой неоднозначности, а значит нет и most vexing parse.

Да даже если бы и был, все равно most vexing parse разрешился бы в пользу объявления функции. А автор-то как раз и хотел получить объявление функции.
0
Нарушитель
1486 / 1288 / 485
Регистрация: 16.08.2014
Сообщений: 5,415
Записей в блоге: 1
07.09.2019, 12:14 6
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Здесь нет никакой неоднозначности, а значит нет и most vexing parse.
да, я не заметил, с утра по раньше мне показалось что это создание объекта в теле функции.
0
1 / 1 / 1
Регистрация: 09.02.2018
Сообщений: 127
07.09.2019, 12:15  [ТС] 7
НУ вот я сделал,но все равно ошибка
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
Нарушитель
1486 / 1288 / 485
Регистрация: 16.08.2014
Сообщений: 5,415
Записей в блоге: 1
07.09.2019, 12:45 8
gordon8899, покажи код где используешь оператор.
0
1 / 1 / 1
Регистрация: 09.02.2018
Сообщений: 127
07.09.2019, 13:02  [ТС] 9
_stanislav, Оператор присваивания где использую?Нигде,я просто хочу создать обьект типа PrintDevice
0
Нарушитель
1486 / 1288 / 485
Регистрация: 16.08.2014
Сообщений: 5,415
Записей в блоге: 1
07.09.2019, 13:06 10
Цитата Сообщение от gordon8899 Посмотреть сообщение
Нигде,я просто хочу создать обьект типа PrintDevice
можно посмотреть код?
0
1 / 1 / 1
Регистрация: 09.02.2018
Сообщений: 127
07.09.2019, 13:10  [ТС] 11
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
Нарушитель
1486 / 1288 / 485
Регистрация: 16.08.2014
Сообщений: 5,415
Записей в блоге: 1
07.09.2019, 13:20 12
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  [ТС] 13
У вас работает мой код?,я тоже самое сделал,все равно нет
0
Нарушитель
1486 / 1288 / 485
Регистрация: 16.08.2014
Сообщений: 5,415
Записей в блоге: 1
07.09.2019, 13:34 14
Цитата Сообщение от gordon8899 Посмотреть сообщение
У вас работает мой код?
смотри
0
Миниатюры
Ошибка binary '=' : no operator found which takes a right-hand operand of type  
1 / 1 / 1
Регистрация: 09.02.2018
Сообщений: 127
07.09.2019, 13:50  [ТС] 15
Странно,у меня есть второй проект где тоже работает,но там нету связи между printDevice и Device классом,когда пишу в printDevice.h
C++
1
class printDevice:public Device{
Вылезает опять эта ошибка
0
Нарушитель
1486 / 1288 / 485
Регистрация: 16.08.2014
Сообщений: 5,415
Записей в блоге: 1
07.09.2019, 13:56 16
Цитата Сообщение от gordon8899 Посмотреть сообщение
Вылезает опять эта ошибка
какая ошибка?
0
1 / 1 / 1
Регистрация: 09.02.2018
Сообщений: 127
07.09.2019, 14:07  [ТС] 17
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
Нарушитель
1486 / 1288 / 485
Регистрация: 16.08.2014
Сообщений: 5,415
Записей в блоге: 1
07.09.2019, 14:21 18
Цитата Сообщение от gordon8899 Посмотреть сообщение
Может это от версии VS зависит?У меня 10
хз, твой проект у меня собрался, значит дело не в коде, либо ты что то мудришь и не договариваешь. попробуй все что можно переустановить у себя, снеси операционку поставь винду 10 и студию 2019. но ты наверное сейчас скажешь что у тебя ком древний)). переустанови тогда то что есть.
0
1 / 1 / 1
Регистрация: 09.02.2018
Сообщений: 127
07.09.2019, 15:34  [ТС] 19
Да нет,комп не древний,я уже исправил ошибку поменял кое-что,спасибо
0
Нарушитель
1486 / 1288 / 485
Регистрация: 16.08.2014
Сообщений: 5,415
Записей в блоге: 1
07.09.2019, 15:42 20
Цитата Сообщение от gordon8899 Посмотреть сообщение
я уже исправил ошибку
какой ты молодец!
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.09.2019, 15:42

Исправить ошибку "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...

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

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

Ошибка: "binary '=' no operator found which takes a right-hand operand"
Добрый день. Пытаюсь функцией вернуть массив byte. Пишу так: STDMETHODIMP...


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

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

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