我正在尝试编译我的导师给我们的代码(不得不重新输入,但我找不到任何拼写错误)并且它不会编译。我们将在以后的任务中使用此代码,所以我想在我们到达那里之前让它工作。
它应该简单地创建一个基于链表的堆栈。我了解代码是如何工作的,我之前也做过模板,但我不知道为什么它不会编译。
第一个堆栈.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
堆栈.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:语法错误:缺少 ';' 在 '<'
c:\users\geldhart\dropbox\cs210\stack\stack.h(9) 之前:
错误 C2059:语法错误:'<'
c:\users\geldhart\dropbox\cs210\stack\stack.h( 34):
错误 C2753: 'NodeType': 部分特化不能匹配主模板
Stack.cpp的参数列表
c:\users\geldhart\dropbox\cs210\stack\stack.cpp(5):
错误 C2143: 语法错误: 缺少' ;' 在 '<'
c:\users\geldhart\dropbox\cs210\stack\stack.cpp(5) 之前:
错误 C4430:缺少类型说明符 - 假定为 int。注意:C++ 不支持默认整数
c:\users\geldhart\dropbox\cs210\stack\stack。
错误 C2988:无法识别的模板声明/定义
c:\users\geldhart\dropbox\cs210\stack\stack.cpp(5):
错误 C2059:语法错误:'<'
c:\users\geldhart\dropbox\cs210\stack\ stack.cpp(11):
error C2588: '::~StackType': 非法全局析构函数
c:\users\geldhart\dropbox\cs210\stack\stack.cpp(11):
致命错误 C1903: 无法从先前的错误中恢复(s);停止编译