我正在尝试编译我的教师给我们的代码(必须重新键入它,但我找不到任何拼写错误)并且它不会编译。我们将使用此代码进行后续分配,因此我希望在到达之前使其工作。
它应该简单地创建一个基于链表的堆栈。我理解代码是如何工作的,之前我已经完成了模板,但我无法弄清楚它为什么不能编译。
First Stack.h
#ifndef STACK_H
#define STACK_H
//Stack definition file
//Stack.h
template<class ItemType>
struct NodeType<ItemType>; //Line 9
template<class ItemType>
class StackType {
public:
StackType();
~StackType();
void MakeEmpty();
void Push(ItemType);
void Pop(ItemType &);
bool IsEmpty() const;
bool IsFull() const;
ItemType Top();
private:
NodeType* topPtr;
};
template<class ItemType>
struct NodeType<ItemType> {
int info;
NodeType<ItemType>* next;
}; //Line 34
#include "Stack.cpp"
#endif
Stack.cpp
//Stack implemenation
#include <iostream>
template<class ItemType>
StackType<ItemType>::StackType() { //Line 5
topPtr=NULL;
}
template <class ItemType>
StackType<ItemType>::~StackType() { //Line 11
MakeEmpty();
}
template <class ItemType>
void StackType<ItemType>::MakeEmpty() {
NodeType<ItemType>* tempPtr;
while (topPtr != NULL) {
tempPtr = topPtr;
topPtr = topPtr->next;
delete tempPtr;
}
}
template <class ItemType>
void StackType<ItemType>::Pop(ItemType & item) {
NodeType<ItemType>* tempPtr;
item = topPtr->info;
tempPtr = topPtr;
topPtr = topPtr->next;
delete tempPtr;
}
template<class ItemType>
void StackType<ItemType>::Push(ItemType item) {
NodeType<ItemType>* location;
location = new NodeType<ItemType>;
location->info = newItem;
location->next = topPtr;
topPtr = location;
}
template <class ItemType>
bool StackType<ItemType>::IsEmpty() const {
return (topPtr=NULL);
}
template <class ItemType>
bool StackType<ItemType>::IsFull() const {
return (false);
}
template<class ItemType>
ItemType StackType<ItemType>::Top() {
return topPtr->info;
}
和main.cpp
#include <iostream>
#include "Stack.h"
using namespace std;
int main () {
int whatever;
StackType<int> s;
s.Push(10);
s.Push(1);
s.Pop(whatever);
return 0;
}
我得到的错误是
c:\ users \ geldhart \ dropbox \ cs210 \ stack \ stack.h(9):
错误C2143:语法错误:缺少';'在'&lt;'之前 c:\ users \ geldhart \ dropbox \ cs210 \ stack \ stack.h(9):
错误C2059:语法错误:'&lt;'
c:\ users \ geldhart \ dropbox \ cs210 \ stack \ stack.h(34):
错误C2753:'NodeType':部分特化不能匹配主模板的参数列表
Stack.cpp
c:\ users \ geldhart \ dropbox \ cs210 \ stack \ stack.cpp(5):
错误C2143:语法错误:缺少';'在'&lt;'之前 c:\ users \ geldhart \ dropbox \ cs210 \ stack \ stack.cpp(5):
错误C4430:缺少类型说明符 - 假定为int。注意:C ++不支持default-int
c:\ users \ geldhart \ dropbox \ cs210 \ stack \ stack.cpp(5):
错误C2988:无法识别的模板声明/定义
c:\ users \ geldhart \ dropbox \ cs210 \ stack \ stack.cpp(5):
错误C2059:语法错误:'&lt;'
C:\用户\ geldhart \保管箱\ cs210 \堆\ stack.cpp(11):
错误C2588:'::〜StackType':非法的全局析构函数
c:\ users \ geldhart \ dropbox \ cs210 \ stack \ stack.cpp(11):
致命错误C1903:无法从之前的错误中恢复;停止编译
答案 0 :(得分:3)
此语法
template<class ItemType>
struct NodeType<ItemType>; //Line 9
可能部分专门化一些现有的NodeType
。
要(转发)声明类型,您只需要
template<class ItemType>
struct NodeType;