我目前正在为课程做作业,它涉及创建一个模板类。我有模板类设置和一切,但我收到的错误似乎无法解决。我已经尝试了各种解决方案,到目前为止都没有工作过,我也进行了大量的研究,并且没有找到与我的情景完全相关的答案,尽管还有很多其他人提出过这个问题。
这是迄今为止的代码......
#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行的每个函数都是如此。
现在,它可能是我的编译器吗?难道我还没有完成所有的功能并返回了一些东西吗?
非常感谢任何帮助,谢谢。
答案 0 :(得分:1)
不要在单独的翻译单元中编译Stack.cpp;它已经包含在Stack.h中。
clang++ -c Stack.h -std=c++11
工作正常。
答案 1 :(得分:0)
问题是您要在.cpp文件中包含.h文件。所以删除
#include "Stack.cpp"
位于头文件的底部并添加
#include "Stack.h"
到.cpp文件的顶部。