2016-09-29 15 views
2
struct TodoItem 
{ 
    std::string todo; 
}; 

const int MAX_STACK_SIZE = 5; 

class TodoStackArray 
{ 
    public: 
    TodoStackArray(); //confusion here<--- 
    bool isEmpty(); 
    bool isFull(); 
    void push(std::string todoItem); 
    void pop(); 
    TodoItem* peek(); 

    /* for grading purposes we need these following methods */ 
    int getStackTop() { return stackTop; } 
    TodoItem** getStack() { return stack; } 

    private: 
    int stackTop; 
    TodoItem* stack[MAX_STACK_SIZE]; 
}; 

上面是來自當前分配的頭文件的一些聲明和類。我們的職責是使用這個頭文件實現一個堆棧程序。但是,我對頭文件中TodoStackArray()的用途有點困惑。這應該是一個基礎構造函數?我應該用它做什麼?從頭文件中使用類變量的誤解

我明白,這是有點具體情況,但考慮到堆棧數組是STL我想你可能都能夠提供一些見解。謝謝!如果你想看到我所做的這個頭文件

...

TodoStackArray::TodoStackArray() //This, unsurprisingly, produces an error. 
{ 
    stackTop = -1; 
    stack[stackTop]; 
} 

bool TodoStackArray::isEmpty() 
{ 
    return (stackTop == -1); 
} 

TodoItem* TodoStackArray::peek() 
{ 
    if(stackTop ==-1) 
    { 
     cout<< "Stack empty, cannot peak."<<endl; 
    } 
    else 
    { 
     return(stack[stackTop]); 
    } 
} 
bool TodoStackArray::isFull() 
{ 
    return(stackTop == 4); 
} 

void TodoStackArray::push(std::string todoItem) 
{ 
    if(stackTop >= 5) 
    { 
     cout<<"Stack full, cannot add new todo item."<<endl; 
    } 
    else 
    { 
     stack[stackTop++]; 
     stack[stackTop]->todo = todoItem; 
    } 
} 

void TodoStackArray::pop() 
{ 
    if(stackTop == -1) 
    { 
     cout<<"Stack empty, cannot pop an item."<<endl; 
    } 
    else 
    { 
     stackTop--; 
    } 
} 

另外,要清楚,我們沒有提供的驅動程序軟件。他們會從他們自己的東西中評估,所以我們必須編寫我們自己的驅動軟件來測試我們的功能。因此缺乏任何主要實施。

+1

從快速閱讀中我可以看出你正在做'stack [stackTop];'這等於'stack [-1];''。你想用這個指令做什麼? –

+1

我收到一條錯誤; 「構造函數的返回類型說明無效」@ 8:30, void Header File中的TodoStackArray :: TodoStackArray() – Derp

+0

_TodoStackArray()「這應該是一個基礎構造函數嗎?我應該用它來做什麼? ?_ TodoStackArray()是用於初始化類實例的構造函數。你可以用這個在這裏初始化你的班級成員。 – Pabdev

回答

1

是的,TodoStackArray::TodoStackArray()真的是你的類的默認構造函數。

你應該什麼就像任何默認構造函數用它做:

類成員是如何應該是初始化如果我創建一個新的TodoStackArray

答案取決於你的班級在初始狀態下的樣子。

在你的情況下,「默認」堆棧是。將stackTop設置爲-1並不是一個好主意,其餘的實現與(stackTop == -1顯然意味着「空棧」)一致。

這種情況發生在你的構造奇怪的是這樣的:

stack[stackTop]; 

是什麼,根據你的,此行的目的是什麼?你是閱讀你的數組中的值在負指數,我們都知道這種事情永遠不會結束。

構造函數用於初始化您的數據。在這裏你正在讀的東西你沒有初始化在一個不存在的索引。沒有多大意義,是嗎? :)

只要擺脫這條線,你應該能夠繼續前進。這裏是使用member initializer list(它們被認爲更好)的等價實現:

TodoStackArray::TodoStackArray() : stackTop(-1) 
{ 
    // notice: no body required here 
} 

玩得開心!

+0

修復它,謝謝! – Derp