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;
}
對不起,過度代碼粘貼!
嘛,肯定照顧它。謝謝。看起來我不需要在函數聲明中添加''? –
citizenkoehn
當在'SimpleStack'的範圍內時,只是簡單的'SimpleStack'引用當前的實例化(感謝稱爲「類名注入」的機制,以防你想要了解更多細節)。但是,在類外的成員函數定義中,類作用域從'::'將類名稱與函數名稱分開後開始;返回類型在該範圍之外。所以你必須完整地拼出類型。 –