これが私がエラーのために持っているものです:
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;
}
コードが完成していないことはわかっていますが、このエラーにより、思ったように機能するかどうかをテストできません。ありがとうございます。