C ++ - Ошибка перегрузки оператора C4430: отсутствует указатель типа - предполагается, что int - PullRequest
4 голосов
/ 02 ноября 2010

Я скомпилировал свой код, используя Borland 5.5, и никаких ошибок не появилось.Но он не будет работать правильно, поэтому я решил использовать Visual Studio 2010 для отладки своей программы.

Visual Studio выдаёт мне эту ошибку:

Error   1   error C4430: missing type specifier - int assumed. Note: C++ does not support default-int   c:\users\johnny\documents\visual studio 2010\projects\stack_linkedlist\stack_linkedlist\classstack.cpp  111 1   STACK_LinkedList

Указывает на моего операторафункция перегрузки.Вот код моей перегрузки оператора.

//operator overload
template <class S>
const Stack<S>::operator=( const Stack& s )
{
    // Check for self assignment
    if (&s==this)
        return *this;

    // Clear the current stack
     while (s.theFront)
        {
            NodePointer p = s.theFront;

            s.theFront = s.theFront->next;
            delete p;
        }

        s.theTop = s.theFront;


    // Copy all data from stack s
    if (!s.isEmpty())
    {
        NodePointer temp = q->theFront;

        while(temp != 0)
        {
            push(temp->data);
            temp = temp->next;
        }
    }

   return *this;
}

Любая помощь будет потрясающей!Спасибо!

Ответы [ 3 ]

9 голосов
/ 02 ноября 2010

Для вашего оператора не определен тип возврата.

const Stack<S>::operator=( const Stack& s )

следует изменить на:

const Stack<S>& Stack<S>::operator=( const Stack& s )
3 голосов
/ 02 ноября 2010

В вашем методе отсутствует тип возвращаемого значения. Попробуйте вместо этого:

template <class S>
const Stack<S>& Stack<S>::operator=( const Stack& s )
{
   // body of method
}
1 голос
/ 02 ноября 2010
template <class S>const Stack<S>::operator=( const Stack& s )

В этом объявлении функции отсутствует тип возвращаемого значения.

Если вы пытаетесь назначить Stack объектов, попробуйте это -

template <class S> 
Stack<S>& Stack<S>::operator=(const Stack& s) 

Перегрузка оператора присваивания должна сделать две вещи -

  1. Выполнить назначение.
  2. Верните * это. Это будет неявно поддерживать несколько утверждений вида a = b = c.

Поскольку вы возвращаете * this, тип возвращаемого значения, указанный в объявлении функции, должен соответствовать type из * this. В этом случае это будет Stack<S>&.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...