Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.02.2013, 00:42   #1
rockfun
 
Регистрация: 27.11.2012
Сообщений: 3
По умолчанию создание списка с использованием класса

Не могу понять где ошибка...прога запускается, но неправельно работает, во всех случаях считает список пустым. Буду очень благодарна за помощь)

Код:
#include <iostream>
#include <cmath>
using namespace std;

struct Node     
        {
        int data;
        Node *link;
        };

class List
{
    Node *head;    
    Node *pPrev;    
    int ElemDaudz;      
public:
    List();
    ~List();
 
    Node * CreateNode();
    bool empty();
    Node * AddFirst ();
    void printList();
    void delAllList();
};

List::List()
{
    head = NULL;
    pPrev==NULL;
    ElemDaudz = 0;
}
 
//
List::~List()
{
    delAllList();
}
 
//
Node* List::CreateNode()
{
    Node *newNode; 		
    newNode = new Node;	
    cout<<"\nEnter number, to add: ";
    cin>>newNode->data;	
    newNode->link=NULL;	
    return newNode;		
}
//
bool List:: empty() 
{if(head == 0)
            return true;
        else
            return false;}
//
Node * List:: AddFirst ()
{
    Node *head;
    Node *newNode;
    newNode->link=head;
    head=newNode;
    return head;
}
//

 
//
void List::printList()
{
    Node* head;
    Node *cur;
    
    cur = head;
    while(cur != NULL)
    {
        cout << cur->data << " ";
        cur = cur->link;
    }
    cout << endl << ElemDaudz << endl;
}
 
//
void List::delAllList()
{
    while(head != NULL)
    {
        Node *cur1 = head;
        head = head->link;
        delete cur1;
    }
}
int main()
{
  List st; 
  Node* head, cur, cur1, newNode;
  int data;
  
  
  
  
  int menu;
do
{
cout<<"\nChoose function\n";
    cout<<"\n1. addToList\n";
    cout<<"2. printList\n";
    cout<<"3. DeleteAll\n";
    cout<<"0. Exit\n";
    cout<<"\nYour choise: ";
    cin>>izv;
switch(izv)
	{	
        case 1: 
		    {     
                 if(st.empty()) { cout<<"list empty"<<endl; head=st.CreateNode();}
                   else
                   
                   head=st.AddFirst ();
                  
            }
            break;
		case 2: 
            {
                if(st.empty()) { cout<<"list empty";}
                else { st.printList(); }
            }  
             break;
        
        case 3: if (head==NULL){break;}
                else {st.delAllList(); break;}
		case 0: cout<<"\nExit"; break;
		default: cout<<"\nIncorect choise!\n";
	}
}
while(menu!=0); 

system("pause>>nul");
return 0;
}

Последний раз редактировалось Stilet; 25.02.2013 в 22:08.
rockfun вне форума Ответить с цитированием
Старый 25.02.2013, 03:00   #2
Ezhik Kihze
Форумчанин
 
Регистрация: 24.12.2012
Сообщений: 639
По умолчанию

Цитата:
но неправельно работает
Все работает точно так, как написано.

Вы создали класс-список, но добавляете элементы в локальный Node* head вместо классового. Причем проверяете на пустоту, печатает и удаляете классовый...
ICQ: 677936656 Gmail: ekEmbed@gmail.com
Ezhik Kihze вне форума Ответить с цитированием
Старый 25.02.2013, 19:31   #3
rockfun
 
Регистрация: 27.11.2012
Сообщений: 3
По умолчанию

Я согласна, но когда добавляю элементы в классовый Node* newNode, не запускается и пишет ошибка " no match for 'operator=' in 'newNode = (&st)->List::CreateNode()' ". Что может быть не так?
rockfun вне форума Ответить с цитированием
Старый 25.02.2013, 19:53   #4
Ezhik Kihze
Форумчанин
 
Регистрация: 24.12.2012
Сообщений: 639
По умолчанию

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

У вас с логикой программы проблема. У вас класс - это Node* + набор функций для работы с ним...
Если у вас класс-список, то вам не нужны дополнительные локальные Node*
Если у вас метод CreateNode добавляет элемент в классовый список, то логичнее вернуть признак успеха сего действия
...
ICQ: 677936656 Gmail: ekEmbed@gmail.com
Ezhik Kihze вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Delphi 7, создание функционального калькулятора с использованием класса ulala Помощь студентам 16 27.03.2013 23:00
Создание стека с использованием класса. studen Visual C++ 5 21.01.2013 10:20
Создание односвязного линейного списка c использованием библиотеки STL. DimkO_Раздлбай Помощь студентам 0 09.05.2011 21:02
Создание пакетного файла с использованием списка значений в качестве параметров. chaosfall Операционные системы общие вопросы 1 05.12.2010 21:01
Класс с использованием списка в С++ kolyan_zver Общие вопросы C/C++ 2 09.11.2010 23:10