好奇的小错误
Posted
技术标签:
【中文标题】好奇的小错误【英文标题】:Curious little error 【发布时间】:2012-09-25 05:04:24 【问题描述】:这是我的错误:
In file included from braincalc.cpp:8:0:
AbstractStack.h:43:1: error: expected class-name before ââ token
这是我的 .h:
//AbstractStack.h
#ifndef ABSTRACTSTACK_H
#define ABSTRACTSTACK_H
#include<iostream>
using namespace std;
template < typename T >
class AbstractStack
public:
// Purpose: clears the stack
// Postconditions: the stack is now empty
virtual void clear() = 0;
// Purpose: push an element into the stack
// Parameters: x is the value to push into the stack
// Postconditions: x is now the element at the top of the stack,
virtual void push(T x) = 0;
// Purpose: pop the stack
// Postconditions: the element formerly at the top of the stack has
// been removed
// Panic: if the stack is currently empty, PANIC!
virtual void pop() = 0;
// Purpose: looks at the top of the stack
// Returns: a reference to the element currently on top of the stack
// Panic: if the stack is currently empty, PANIC!
virtual T& top() = 0;
// Purpose: Checks if a stack is empty
// Returns: 'true' if the stack is empty
// 'false' otherwise
virtual bool isEmpty() = 0;
;
class LinkedStack: public AbstractStack
public:
int m_data;
LinkedStack *m_next;
void clear()
LinkedStack *p;
LinkedStack *tmp;
while(m_next != NULL)
p = this;
tmp = p -> m_next;
delete p;
void push(int x)
LinkedStack *tmp = new LinkedStack;
tmp -> m_data = m_data;
tmp -> m_next = m_next;
m_data = x;
m_next = tmp;
void pop()
LinkedStack *tmp;
if (m_next != NULL)
tmp = m_next;
m_data = tmp -> m_data;
m_next = tmp -> m_next;
delete tmp;
int& top()
return m_data;
bool isEmpty()
bool empty = false;
if (m_next == NULL)
empty = true;
return empty;
;
#endif
这是.cpp:
//braincalc.cpp
#include"AbstractStack.h"
#include<string>
#include<cstdlib>
int main()
string input;
bool again=true;
int ctr=0;
int temp1, temp2;
LinkedStack stack;
do
getline(cin, input, '$');
input.c_str();
if (isdigit(input[ctr]))
stack.push(atoi(&input[ctr]));
ctr++;
else if (isspace(input[ctr]))
ctr++;
else if (input[ctr] == '*')
temp2 = stack.top();
stack.pop();
temp1 = stack.top();
stack.pop();
stack.push(temp1 * temp2);
ctr++;
else if (input[ctr] == '/')
temp2 = stack.top();
stack.pop();
temp1 = stack.top();
stack.pop();
stack.push(temp1 / temp2);
ctr++;
else if (input[ctr] == '+')
temp2 = stack.top();
stack.pop();
temp1 = stack.top();
stack.pop();
stack.push(temp1 + temp2);
ctr++;
else if (input[ctr] == '-')
temp2 = stack.top();
stack.pop();
temp1 = stack.top();
stack.pop();
stack.push(temp1 - temp2);
ctr++;
else if (input[ctr] == '!')
temp1 = stack.top();
stack.pop();
stack.push(-temp1);
ctr++;
else if (input[ctr] == '#')
again = false;
ctr=0;
while(again == true);
cout << "["<<stack.top()<<"]"<<endl;
return 0;
我意识到代码没有完成,但是这个错误导致我无法测试它是否像我认为的那样工作。提前谢谢。
【问题讨论】:
您正在使用许多 STD 库元素,例如std::string
- 为什么不使用 std::stack<int>
?这需要编写自己的堆栈吗?
@PiotrNycz 是的,我需要使用链表和重新定义的函数编写一个新的。我相信由于我在这里的帮助,我可以正常工作。除了我的 clear()。知道我哪里出错了吗?
【参考方案1】:
AbstractStack
不是类,所以不能写:
class LinkedStack: public AbstractStack
您要么必须将LinkedStack
设为模板:
template<class T>
class LinkedStack: public AbstractStack<T>
或派生自AbstractStack
的特化:
class LinkedStack: public AbstractStack<int>
【讨论】:
以上是关于好奇的小错误的主要内容,如果未能解决你的问题,请参考以下文章