Любопытная маленькая ошибка

Вот что я имею за ошибку:

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;
}

Код не закончен, я понимаю, но эта ошибка делает его таким, что я не могу проверить, работает ли он, как я думаю, будет или нет. Спасибо заранее

2

Решение

AbstractStack это не класс, поэтому вы не можете написать:

class LinkedStack: public AbstractStack

Вам либо придется сделать LinkedStack шаблон:

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

или вытекают из специализации AbstractStack:

class LinkedStack: public AbstractStack<int>
6

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector