Я работаю над этой программой, но я получаю 2 ошибки, я не могу знать, что они означают или как я их исправить .... программа должна прочитать любое уравнение как + Ьс или (а + б) -с ... и т.д. и проверить, если матч скобки или не здесь кодОшибка C2664: 'Stack <type> :: equal': невозможно преобразовать параметр 1 из 'char' в 'Stack <type> &'
// A simple Integer stack, Array based
#include <string>
#include <iostream>
#define STACK_MAX 100
#define equation
using namespace std;
template <typename type>
class Stack {
private:
type data[STACK_MAX];
int size;
public:
Stack();
~Stack() { } // Destructor
int top();
void push(int d) ;
void pop() ;
int is_full();
int is_empty() ;
void equal(Stack& entry) ;
};
template <typename type > int Stack<type>::is_full() {
return (STACK_MAX >= size);
}
template <typename type > int Stack<type>::is_empty() {
return (STACK_MAX == 0);
}
template <typename type> Stack <type>::Stack() {
size = 0;
}
template <typename type > int Stack<type>:: top() {
if (is_empty()) {
printf("Error: stack empty\n");
return -1;
}
return data[size-1];
}
template <typename type > void Stack <type>::push (int d) {
if (! is_full()) {
data[size++] = d;
} else {
printf("Error: stack full\n");
}
}
template < typename type > void Stack <type>::pop() {
if (size == 0) {
printf("Error: stack empty\n");
} else {
size--;
}
}
template <typename type > void Stack <type> ::equal (Stack& entry) {
std::string& equation ;
char left = '(' ;
char right= ')' ;
Stack <type> x ;
string::size_type a ;
char next ;
next = entry ;
bool failed = false ;
for (a= 0 ; ! equation.length() ; ++a) {
next = equation[a] ;
if (next == left) {
x.push (next);
} else {
if (x.is_empty()) {
x.pop() ;
} else {
failed = true ;
}
}
}
if (a == 0) {
cout << " No parenthesis"<< endl ;
} else if (x.top() == left) {
cout << "Parenthesis don’t match. Missing right parenthesis" << endl ;
} else if (x.top() == right) {
cout << "Parenthesis don’t match. Missing left parenthesis " << endl ;
} else {
cout << "Matching parenthesis" << endl ;
}
}
int main() {
Stack <char> equation2 ;
char b ;
cout << " please enter your equation " << endl ;
for (int i =0 ; i< 100 ; i++) {
cin >> b ;
equation2.equal(b) ;
}
system ("pause") ;
return 0;
}
и вот ошибки
2 IntelliSense: a reference of type "Stack<char> &" (not const-qualified) cannot be initialized with a value of type "char" c:\users\mike\documents\visual studio 2010\projects\stack\stack\stack.cpp 101
Error 1 error C2664: 'Stack<type>::equal' : cannot convert parameter 1 from 'char' to 'Stack<type> &' c:\users\mike\documents\visual studio 2010\projects\stack\stack\stack.cpp 101
НЕ СЛЕДУЕТ isFull возврата (STACK_MAX <= размер)? –
Это выглядит очень ошибочным. Вы никогда ничего не нажимаете на любой стек. Но вы хотите «сравнить» его. Вы можете сравнить стек с персонажем. В любом случае, стек должен содержать 'ints', поэтому я сомневаюсь, что вы действительно хотели прочитать« chars ». ** Чего вы хотите достичь **? – sehe