我正在做一些練習,並試圖將簡單的類轉換爲模板類。 更改代碼後,我收到了一堆鏈接程序錯誤,因此我從實現中刪除了頭文件包含語句,現在將實現文件包含在頭文件的底部。自那時起,我得到這個奇怪的語法錯誤:缺少';' '<'之前。我看不到我做錯了什麼。失蹤';'之前'<'
這是我的頭文件:
#ifndef STACK_H
#define STACK_H
#include <iostream>
template<class T>
class Stack
{
T* buffer;
size_t count;
public:
Stack();
~Stack();
void push(T value);
void pop();
T top() const;
size_t size() const;
};
#include "Stack.cpp"
#endif
而這正是實現文件:
template<class T>
Stack<T>::Stack() : count(0)
{
buffer = new T;
}
template<class T>
Stack<T>::~Stack()
{
delete[] buffer;
}
template<class T>
void Stack<T>::push(T value)
{
if(size() == 0) *(buffer) = value;
else
{
T* newBuffer = new T[count+1];
for(size_t i=0; i <= size(); ++i)
newBuffer[i] = buffer[i];
newBuffer[count] = value;
buffer = newBuffer;
}
++count;
}
template<class T>
void Stack<T>::pop()
{
if(size() <= 0) return;
buffer[size()-1]=0;
--count;
}
template<class T>
typename T Stack<T>::top() const
{
if(size() <= 0)
{
std::cout << "the stack is empty" << std::endl;
return -1;
}
else
{
return buffer[size()-1];
}
}
template<class T>
size_t Stack<T>::size() const
{
return count;
}
任何幫助,將不勝感激!
也許看着它給你的行號可能會有所幫助... – Mysticial 2012-04-04 16:03:35
你是如何編譯它的? – juanchopanza 2012-04-04 16:04:47
我不是很擅長編寫模板,但是您不需要在類本身內部實現模板類的成員函數的主體嗎?我的意思是說,每個文件都需要知道如何重新生成類。 – Shahbaz 2012-04-04 16:06:19