2013-09-22 71 views
2

長期讀者,第一次海報!班級模板和參考返回類型

在我開始之前的一些評論:我不想找人爲我做我的工作,我只需要一點指導。另外,我做了大量的谷歌搜索,我還沒有找到任何解決方案。

我有涉及創建爲下面的類模板的課堂作業:

class SimpleStack 
{ 
public: 
    SimpleStack(); 
    SimpleStack& push(int value); 
    int pop(); 

private: 
    static const int MAX_SIZE = 100; 
    int items[MAX_SIZE]; 
    int top; 
}; 

SimpleStack::SimpleStack() : top(-1) 
{} 

SimpleStack& SimpleStack::push(int value) 
{ 
    items[++top] = value; 
    return *this; 
} 

int SimpleStack::pop() 
{ 
    return items[top--]; 
} 

一切似乎除了SimpleStack& push(int value)工作:

template <class T> 
class SimpleStack 
{ 
public: 
    SimpleStack(); 
    SimpleStack& push(T value); 
    T pop(); 

private: 
    static const int MAX_SIZE = 100; 
    T items[MAX_SIZE]; 
    int top; 
}; 

template <class T> 
SimpleStack<T>::SimpleStack() : top(-1) 
{} 

template <class T> 
SimpleStack& SimpleStack<T>::push(T value) 
{ 
    items[++top] = value; 
    return *this; 
} 

template <class T> 
T SimpleStack<T>::pop() 
{ 
    return items[top--]; 
} 

我不斷收到有關的定義,下面的錯誤SimpleStack& push(int value):「使用類模板需要模板參數列表」和「無法將函數定義與現有聲明進行匹配」。

這裏是主要的,如果有幫助:

#include <iostream> 
#include <iomanip> 
#include <string> 
#include "SimpleStack.h" 
using namespace std; 

int main() 
{ 
    const int NUM_STACK_VALUES = 5; 
    SimpleStack<int> intStack; 
    SimpleStack<string> strStack; 
    SimpleStack<char> charStack; 

    // Store different data values 
    for (int i = 0; i < NUM_STACK_VALUES; ++i) 
    { 
    intStack.push(i); 
    charStack.push((char)(i + 65)); 
    } 
    strStack.push("a").push("b").push("c").push("d").push("e"); 

    // Display all values 
    for (int i = 0; i < NUM_STACK_VALUES; i++) 
    cout << setw(3) << intStack.pop(); 
    cout << endl; 

    for (int i = 0; i < NUM_STACK_VALUES; i++) 
    cout << setw(3) << charStack.pop(); 
    cout << endl; 

    for (int i = 0; i < NUM_STACK_VALUES; i++) 
    cout << setw(3) << strStack.pop(); 
    cout << endl; 

    return 0; 
} 

對不起,過度代碼粘貼!

回答

1

讓它

template <class T> 
SimpleStack<T>& SimpleStack<T>::push(T value) {...} 
+0

嘛,肯定照顧它。謝謝。看起來我不需要在函數聲明中添加''? – citizenkoehn

+0

當在'SimpleStack '的範圍內時,只是簡單的'SimpleStack'引用當前的實例化(感謝稱爲「類名注入」的機制,以防你想要了解更多細節)。但是,在類外的成員函數定義中,類作用域從'::'將類名稱與函數名稱分開後開始;返回類型在該範圍之外。所以你必須完整地拼出類型。 –