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

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

09.03.2017, 13:51. Показов 3848. Ответов 3
Метки нет (Все метки)

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

list.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#ifndef LIST_H_
#define LIST_H_
 
typedef std::string Item;
 
class List
{
private:
    enum {MAX = 5};
    Item items[MAX];
    int top;
 
public:
    List();
    bool isempty() const;
    bool isfull() const;
    void showlist();
};
 
#endif LIST_H_
list.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
#include <iostream>
#include "list.h"
 
    List::List()
    {
        top = 0;
    }
    
    bool List::isempty() const
    {
        return top == 0;
    }
 
    bool List::isfull() const
    {
        return top == MAX;
    }
 
    void List::showlist()
    {
        for (int i = 0; i < MAX; i++)
            std::cout << List::items[i] << std::endl;
    }
uselist.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <string>
#include "list.h"
 
int main()
{
    List list;
    std::string ls[] = {
        "Fritz Morgan", "Valter Prist", "Antonio Formel",
        "Brianna Kresto", "Melisiya Dan'ya", "Virtezz Xavierro",
        "Leen Shnoyder", "Fabrizio L'yanos"
    };
 
    if (list.isempty())
        for (int i = 0; !list.isempty(); i++)
            list.add(ls[i]);
 
    list.showlist();
    return 0;
}
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.03.2017, 13:51
Ответы с готовыми решениями:

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

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

Ошибка binary '=' : no operator found which takes a right-hand operand of type
Ошибка Erro1 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 'T'
Здравствуйте. Пытаюсь сравнить элемент массива с объектом,который я создаю в мейн и компилятор...

3
Любитель чаепитий
3586 / 1686 / 519
Регистрация: 24.08.2014
Сообщений: 5,704
Записей в блоге: 1
09.03.2017, 14:07 2
В list.h поключите <string>

Добавлено через 1 минуту
Цитата Сообщение от mariellla Посмотреть сообщение
C++
1
if (list.isempty())
А зачем эта проверка?

Добавлено через 4 минуты
Цитата Сообщение от mariellla Посмотреть сообщение
#endif LIST_H_
Так тоже нельзя...
Надо так:
C++
1
#endif // LIST_H_
И где метод add?

Цитата Сообщение от mariellla Посмотреть сообщение
for (int i = 0; !list.isempty(); i++)
Ни разу не выполнится...

Добавлено через 17 секунд
Цитата Сообщение от mariellla Посмотреть сообщение
#endif LIST_H_
Так тоже нельзя...
Надо так:
C++
1
#endif // LIST_H_
И где метод add?

Цитата Сообщение от mariellla Посмотреть сообщение
for (int i = 0; !list.isempty(); i++)
Ни разу не выполнится...
0
0 / 0 / 1
Регистрация: 05.09.2016
Сообщений: 42
09.03.2017, 18:19  [ТС] 3
Кое что исправила..
Теперь вообще пишет: Прекращена работа программы ***.exe

list.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
#include <string>
#ifndef LIST_H_
#define LIST_H_
 
typedef std::string Item;
 
class List
{
private:
    enum {MAX = 5};
    Item items[MAX];
    int top;
 
public:
    List();
    bool isempty() const;            
    bool isfull() const;             
    void add(const Item & item);     
    void visit(void (*pf) (Item &));    
    void showlist();
    void resetlist();
};
 
#endif // LIST_H_
list.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
#include <iostream>
#include "list.h"
 
    List::List()    {   top = 0;    }
    
    bool List::isempty() const  {       return top == 0;    }
 
    bool List::isfull() const   {       return top == MAX;  }
 
    void List::add(const Item & item)
    {
        if (top < MAX)
            items[++top] = item;
    }
 
    void List::visit(void (*pf) (Item &))
    {
        for (int i = 0; i < MAX; i++)
            pf(items[i]);
    }
 
    void List::showlist()
    {
        for (int i = 0; i < MAX; i++)
            std::cout << items[i] << std::endl;
    }
 
    void List::resetlist()  {       top = 0;    }
uselist.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <string>
#include "list.h"
 
int main()
{
    List list;
    std::string ls[] = {
        "Fritz Morgan", "Valter Prist", "Antonio Formel",
        "Brianna Kresto", "Melisiya Dan'ya", "Virtezz Xavierro",
        "Leen Shnoyder", "Fabrizio L'yanos"
    };
 
    if(list.isempty())
        for (int i = 0; !list.isfull(); i++)
            list.add(ls[i]);
 
    list.showlist();
    return 0;
}
0
Любитель чаепитий
3586 / 1686 / 519
Регистрация: 24.08.2014
Сообщений: 5,704
Записей в блоге: 1
09.03.2017, 18:46 4
Цитата Сообщение от mariellla Посмотреть сообщение
C++
1
2
if (top < MAX)
  items[++top] = item;
Тут падает, потому что инкремент префиксный.
Получается при top = 4: 4 < 5, а пытаемся обратиться к items[5], которого нет.
Пишите так: items[top++] = item;
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.03.2017, 18:46

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

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

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 {...


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

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

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