這裏是頭文件的代碼,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: In copy constructor ‘stackClass::stackClass(const stackClass&)’:
stack.cpp:19:31: error: cannot convert ‘stackClass::GetStackTopPtr’ from type ‘stackNode* (stackClass::)()’ to type ‘stackNode*’
我不知道爲什麼編譯器會抱怨,似乎在問題1行在stack.cpp中,第19行,right.GetStackTopPrt
將返回一個stackNode *
類型,該類型應該很好地分配給左側的stackNode*
。
請幫助,如果你知道問題是什麼。謝謝!
Thanks.I沒有真正抱怨編譯器抱怨,我只是說它是這樣做的。 – radashevskiy
@radashevskiy啊,夠公平的。我會同意有一種閱讀編譯器錯誤消息的藝術。這是否解決了這個問題? – Xymostech
這當然是一個很大的疏忽,感謝你指出了這一點。然而,在我解決這個問題之後,該行仍然存在問題,所以我必須在頭文件和實現文件中將const字添加到 stackNode * GetStackTopPtr(void)的末尾。還必須修復pop()以返回彈出節點的值。 而且還有很多工作要做! – radashevskiy