失踪 ';'在'<'之前

时间:2012-04-04 16:02:10

标签: c++ templates

我正在做一些练习,并试图将一个简单的类转换为模板类。 更改代码后,我收到了一堆链接器错误,所以我从实现中删除了头文件包含语句,现在包含头文件底部的实现文件。从那以后我得到了这个奇怪的语法错误:缺少';'在'<'之前。我看不出我做错了什么。

这是我的头文件:

#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;
}

任何帮助将不胜感激!!!

1 个答案:

答案 0 :(得分:3)

我的猜测是你正在尝试编译.cpp文件。尽管文件扩展名混乱,但它不是一个完整的翻译单元,因此无法自行编译。只需在任何使用该类的文件中包含标题。

就个人而言,我会将实现移到头文件中;其他人可能会给它一个不同的文件扩展名,看起来不像可编译的源文件(我已经看到.tcc.inl用于这些文件,但没有普遍的约定。)

此外:

template<class T> 
typename T Stack<T>::top() const
^^^^^^^^^

删除typename;你只把它放在一个取决于模板参数的类型名称之前。