好奇的小错误

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&lt;int&gt;?这需要编写自己的堆栈吗? @PiotrNycz 是的,我需要使用链表和重新定义的函数编写一个新的。我相信由于我在这里的帮助,我可以正常工作。除了我的 clear()。知道我哪里出错了吗? 【参考方案1】:

AbstractStack不是类,所以不能写:

class LinkedStack: public AbstractStack

您要么必须将LinkedStack 设为模板:

template<class T>
class LinkedStack: public AbstractStack<T>

或派生自AbstractStack的特化:

class LinkedStack: public AbstractStack<int>

【讨论】:

以上是关于好奇的小错误的主要内容,如果未能解决你的问题,请参考以下文章

一个小错误记录

php 编译小错误

小错误提示

HttpRunnerManager--部署小错误

Oracle中的字符串缓冲区太小错误

SQL:插入指定标识列的数据时候的小错误