Помощь - Поиск - Пользователи - Календарь
Полная версия: C++ работа с класами, описание функции через "operator", проблемы с вызовом функций
Форум «Всё о Паскале» > Delphi, Assembler и другие языки. > Другие языки
mansoff
нужна помощь по работе с классами ,
одно из условий задачи было , использовать "Operator" и const спецификатор

ниже код, собствено модуль я исправил так чтобы компилятор не ругался, а вызвать из main функцию(ранее бывшую AddBegin) с оператором не удаётся, да и у Страуструпа как-то ненахожу должных примеров

list.h

#ifndef CLASS_LIST
#define CLASS_LIST
class List
{
public:
    List(void);
    ~List(void);
    List& List::operator = (const int&); // tut ran'she bylo viod AddBegin(int);
    void AddEnd(int);
    void Sort(void);
    void Print(void);
    int GetNumberOfNodes(void);  
private:
    List *Head, *Tail, *next, *prev;;
    int numberOfNodes, value;    
};
#endif




list.cpp

#include <iostream>

using namespace std;

#include "list.h"

List::List(void)
{
    this->Head = 0;
    this->Tail = 0;
    this->numberOfNodes = 0;
};

List::~List(void)
{
   List *currentPointer = this->Tail, *temporaryPointer;
   while ( currentPointer != 0 )
   {
         temporaryPointer = currentPointer;
         currentPointer = currentPointer->prev;
         
         delete(temporaryPointer);
   }
   delete(this->Tail);
};

List& List::operator = (const int& value); // tut bylo void List::AddBegin(const int value)
{
    if ( this->Head == 0 )
    {
        this->Head = new List;
        (this->Head)->value = value;
        (this->Head)->prev = 0;
        (this->Head)->next = 0;
        (this->Tail) = (this->Head);
    }
    else
    {
        List *temporaryPointer = this->Head;
        
        this->Head = new List;
        (this->Head)->prev = 0;
        (this->Head)->value = value;
        temporaryPointer->prev = Head;
        Head->next = temporaryPointer;
    }
    (this->numberOfNodes)++;
};

void List::AddEnd(const int value)
{
    if ( this->Head == 0 )
    {
        this->Head = new List;
        (this->Head)->value = value;
        (this->Head)->prev = 0;
        (this->Head)->next = 0;
        (this->Tail) = (this->Head);
    }
    else
    {
        List *temporaryPointer = this->Tail;
        
        this->Tail = new List;
        (this->Tail)->next = 0;
        (this->Tail)->value = value;
        temporaryPointer->next = Tail;
        Tail->prev = temporaryPointer;
    }
    (this->numberOfNodes)++;
};

void List::Sort(void)
{
  List *Iter;
  int Temp, number1, number2, SwapFlag = 1;

  if (this->Head)  
    while (SwapFlag)
    {
      Iter = this->Head;
      SwapFlag = 0;

      while (Iter->next)
      {
        number1 = Iter->next->value;
        number2 = Iter->value;
      
        if (number1 < number2)
        {
          Temp = Iter->next->value;
          Iter->next->value = Iter->value;
          Iter->value = Temp;

          SwapFlag = 1;
        }

        Iter = Iter->next;
      }

    } 
}

int List::GetNumberOfNodes(void) 
{
    return :: operator this->numberOfNodes;
}

void List::Print(void)
{
    for (List *temporaryPointer = this->Head; temporaryPointer != 0; temporaryPointer = temporaryPointer->next)
        cout << temporaryPointer->value << "\n";
    cout << "\n";
};

volvo
Во-первых, какой у тебя компилятор?

Во-вторых, программу надо чуть-чуть подкорректировать, потому что есть синтаксические ошибки. И в третьих - покажи, как ты пытаешься вызвать operator =?
mansoff
Цитата(volvo @ 26.05.2007 15:38) *

Во-первых, какой у тебя компилятор?

Во-вторых, программу надо чуть-чуть подкорректировать, потому что есть синтаксические ошибки. И в третьих - покажи, как ты пытаешься вызвать operator =?

компилятор g++ от Dev-cpp 4.9.9.2 ,

вызывал примерно так


List *myList = new List;
    int value;
...
    cin >> value;
    myList->List(value);
...


volvo
Попробовал в Turbo C++ сделать так:

int main() {

  int value;
  List *my_list = new List();

  do {
    cin >> value;
    if(value) *my_list = value;
  } while(value);

  my_list -> Print();

  return 0;
}

- все отработало... Могу протестить в MinGW (GCC), если надо...
mansoff
лог из cmd

g++ -c 3.cpp -o 3.o
g++ -c list.cpp -o list.o
list.cpp:27: error: declaration of `List& List::operator=(const int&)' outside o
f class is not definition
list.cpp:28: error: expected unqualified-id before '{' token
list.cpp:28: error: expected `,' or `;' before '{' token
make: *** [list.o] Error 1

ой , извиняюсь, точка с запятой после функции лишняя =))
всем спасибО!))
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.