我的模板类有错误

时间:2014-02-06 17:03:58

标签: c++ templates

我目前正在为课程做作业,它涉及创建一个模板类。我有模板类设置和一切,但我收到的错误似乎无法解决。我已经尝试了各种解决方案,到目前为止都没有工作过,我也进行了大量的研究,并且没有找到与我的情景完全相关的答案,尽管还有很多其他人提出过这个问题。

这是迄今为止的代码......

#ifndef STACK_H
#define STACK_H

#include "Queue.h"
#include "MyException.h"

#include <iostream>

using namespace std;

template<class T>
class Stack;

template<class T>
ostream& operator<<(ostream&,Stack<T>&);

template<class T>
class Stack
{
  public:
    Stack();
    Stack(const Stack<T>& other);
    void push(const T& el);
    T pop();
    T peek();
    bool isEmpty();

    friend ostream& operator<< <T>(ostream&,Stack<T>&);

    Stack<T>& operator=(const Stack<T>& other);~Stack();

  private:
    class Node
    {
      public:
        Node(const T& data, Node* n = 0)
        {
            element = data;
            next = n;
        }

        T element;
        Node* next;
};

    Node* top;

};

#include "Stack.cpp"

#endif

即“Stack.h”,然后是

template<class T>
Stack<T>::Stack()
{

}

template <class T>
Stack<T>::Stack(const Stack<T>& other)
{

}

template <class T>
void Stack<T>::push(const T& el)
{

}

template <class T>
T Stack<T>::pop()
{

}

template <class T>
T Stack<T>::peek()
{

}

template <class T>
bool Stack<T>::isEmpty()
{
    return false;
}

即“Stack.cpp”。 我知道实现在不同的文件中并不是普遍接受的方法,但不幸的是,这是代码需要的地方。现在,即使没有任何实际代码,我也可以运行它,可以说,我得到以下错误。

3: expected constructor, destructor, or type conversion before '<' token
3: expected ';' before '<' token
9: expected constructor, destructor, or type conversion before '<' token
9: expected ';' before '<' token
17: expected init-declarator before '<' token
17: expected ';' before '<' token
23: expected init-declatator before '<' token
23: expected ';' before '<' token

并且对于第35行的每个函数都是如此。

现在,它可能是我的编译器吗?难道我还没有完成所有的功能并返回了一些东西吗?

非常感谢任何帮助,谢谢。

2 个答案:

答案 0 :(得分:1)

不要在单独的翻译单元中编译Stack.cpp;它已经包含在Stack.h中。

clang++ -c Stack.h -std=c++11

工作正常。

答案 1 :(得分:0)

问题是您要在.cpp文件中包含.h文件。所以删除

#include "Stack.cpp"

位于头文件的底部并添加

#include "Stack.h"

到.cpp文件的顶部。