программа для работы с двусвязным нециклическим списком. инверсия списка

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Ответить
siner
Сообщения: 3
Зарегистрирован: 05 ноя 2013, 18:54

Есть программа для работы с двухсвязным списком. Есть проблемы с функцией инверсии списка. Visual C++ выдает следующую ошибку:
c:\documents and settings\1\мои документы\visual studio 2010\projects\11\11\11.cpp(175): error C2678: бинарный ">>": не найден оператор, принимающий левый операнд типа "std::istream" (или приемлемое преобразование отсутствует)
Подскажите, пожалуйста, как это исправить.

Код: Выделить всё

#include <iostream>
#include <windows.h>
using namespace std;
 
class Node
{
public:
    int number;
    Node* next;
    Node* last;
};
 
void russia(const char*);
 
void main()
{
    short action = -1;
    Node* head = NULL;
    Node* tail = NULL;
    Node* ptrLast = NULL;
 
    while (1)
    {       
        russia("1. Добавить Элемент\n");
        russia("2. Просмотр Списка\n");
        russia("3. Инверсия списка\n");
        russia("0. Выход\n\n");
        russia("Ваш Выбор: ");
        cin>>action;
 
        if (action == 0)
        {
            system("CLS");
            break;
        }
 
        if (action == 1)
        {
            system("CLS");
            int numb = -1;
            russia("Введите Число: ");
            cin>>numb;
            Node* ptr = new Node;
            ptr->number = numb;
            ptr->next = NULL;
            tail = ptr;
            if (head == NULL)
            {
                head = ptr;
                ptrLast = ptr;
                ptr->last = NULL;
                system("CLS");
                continue;
            }
            ptr->last = ptrLast;
            ptrLast->next = ptr;
            ptrLast = ptr;
            system("CLS");
            continue;
        }
 
        if (action == 2)
        {
            system("CLS");
            Node* ptr = NULL;
            if (head == NULL)
            {
                russia("\t!!! СПИСОК ПУСТ !!!\n\n");
                system("PAUSE");
                system("CLS");
                continue;
            }
            russia("* * * * * СПИСОК: СЛЕВА НАПРАВО * * * * *\n\n");
            ptr = head;
            while (1)
            {
                cout<<ptr->number<<" ";
                if (ptr->next == 0)
                    break;
                ptr = ptr->next;
            }
            cout<<"\n\n";
            system("PAUSE");
            system("CLS");
            continue;
        }
 
        if (action == 3)
        {
            system("CLS");
            Node* ptr = NULL;
            
            if (head == NULL)
            {
                cin >> ptr;
 
                int len = strlen(ptr);
                for (int i=0; i<(len-1)/2; i++)
                {
                     char c = ptr[i];
                     ptr[i] = ptr[len-1-i];
                     ptr[len-1-i] = c;
                }
 
                cout << "Perevernutue simvolu:\n" << ptr << endl;
                cin >> ptr;
                return 0;
            }
            system("PAUSE");
            system("CLS");
            continue;
        }
 
        if (action > 3)
        {
            system("CLS");
            russia("\t!!! НЕВЕРНЫЙ ВЫБОР. ПОВТОРИТЕ ВВОД !!!\n\n");
            system("PAUSE");
            system("CLS");
            continue;
        }
    }
}
 
void russia(const char* rus)
{
    char word[100];
    CharToOemA(rus, word);
    cout<<word;
}
Аватара пользователя
Decoder
Сообщения: 308
Зарегистрирован: 19 фев 2008, 23:11
Откуда: Moscow

Судя по коду у тебя ошибка в строках

Код: Выделить всё

cin >> ptr;
Напиши так:
cin >> ptr->number;
Поумнеть несложно, куда труднее от дури избавиться.
siner
Сообщения: 3
Зарегистрирован: 05 ноя 2013, 18:54

Decoder писал(а):Судя по коду у тебя ошибка в строках

Код: Выделить всё

cin >> ptr;
Напиши так:
Извините, а что такое number?
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

Такой вопрос может задать только человек, который не писал эту программу.

number - это поле класса Node.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Аватара пользователя
Decoder
Сообщения: 308
Зарегистрирован: 19 фев 2008, 23:11
Откуда: Moscow

Дальше вообще полный бред...

Код: Выделить всё

                int len = strlen(ptr);
                for (int i=0; i<(len-1)/2; i++)
                {
                     char c = ptr[i];
                     ptr[i] = ptr[len-1-i];
                     ptr[len-1-i] = c;
                }
Использовать алгоритм переворота символьной строки для перестановки элементов целочисленного списка - это как в анекдоте:
- На каком языке программируете?
- На молдавском.
Поумнеть несложно, куда труднее от дури избавиться.
Ответить