Невозможно назначить один указатель другому из-за несоответствия типов, или так говорит компилятор

Вот код заголовочного файла, stack.h:

#include <iostream>
using namespace std;
//template <class T> struct stackNode;
//template <class T>
struct stackNode {
int item;
stackNode *Next;
stackNode *Prev;
//stackNode *Temp;

};
class stackClass {
public:
stackClass();
stackClass(const stackClass &right);
~stackClass();
stackClass &operator=(const stackClass &right);
int counter;
int StackIsEmpty(void);
//stackNode *origptr;
void push( int item, bool &success);
int pop(void);

int GetStackTop(void);

protected:
stackNode *GetStackTopPtr(void);private:

stackNode *Top;
stackNode *Current;
//stackNode *origptr;
//stackNode<T> *Next;
};

Вот файл реализации, stack.cpp:

#include "stack.h"
//constructor
stackClass::stackClass(){
Top = NULL;
int counter = 0;
}

//copy constructor
stackClass::stackClass(const stackClass &right){
if (right.Top == NULL){
Top = NULL;
counter = 0;
}
else {
stackNode * origptr = right.GetStackTopPtr;
stackNode * currptr;
Top = new stackNode;
currptr = Top;

while(origptr->Next != NULL){
currptr->item = origptr->item;
origptr = origptr->Next;
currptr->Next = new stackNode;
currptr->Next->item = origptr->item;
currptr = currptr-> Next;
}
currptr->Next = NULL;
}
}

//Destructor
stackClass::~stackClass(){
while (Top != NULL){
pop();
}
}
//push
void stackClass::push(int item, bool &success){
success = false;
if (Top == NULL){
Top = new stackNode;
Top -> item = item;
Top -> Next = NULL;
Top -> Prev = NULL;
Current = Top;
counter++;
success = true;
}
else {
stackNode * Temp = new stackNode;
Current -> Next = Temp;
Temp -> Prev = Current;
Temp -> Next = NULL;
Current = Temp;
Current -> item = item;
counter++;
success = true;
}

}

int stackClass::pop(void){

if (Top == NULL){
cout<<"Stack is empty"<<endl;
}

else if (counter == 1){
Top = NULL;
delete Current;
counter--;
}

else if(counter > 1){
Current -> Prev -> Next = NULL;
Current = Current -> Prev;
stackNode * Temp = Current -> Next;
delete Temp;
counter--;
}
}

int stackClass::StackIsEmpty(void){
if (counter == 0)
return 1;
else
return 0;
}

int stackClass::GetStackTop(void){

int item = Top->item ;
return item;
}

stackNode *stackClass::GetStackTopPtr(void){
return Top;
}

и вот проблема,

stack.cpp: в конструкторе копирования ‘stackClass :: stackClass (const stackClass&)»:
stack.cpp: 19: 31: ошибка: невозможно преобразовать ‘stackClass :: GetStackTopPtr’ из типа ‘stackNode * (stackClass ::) ()’ в тип ‘stackNode *’

Я понятия не имею, почему компилятор жалуется, кажется, что в рассматриваемой строке, в stack.cpp, строка 19, right.GetStackTopPrt вернет stackNode * тип, который должен быть красиво назначен stackNode* с левой стороны.

Пожалуйста, помогите, если вы знаете, в чем проблема. Спасибо!

0

Решение

Вы пытаетесь установить

stackNode * origptr = right.GetStackTopPtr;

где левая сторона является stackNode указатель, а правая часть является функция GetStackTopPtr, Я думаю, что вы хотели написать:

stackNode * origptr = right.GetStackTopPtr(); // Note the parentheses!

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

5

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector