使用Shunting Yard算法的实现,我不断收到此错误(在函数' void InputString()':' inString未在此范围内声明')我试图编译(什么很少)代码 - 不完全确定是什么导致它。
#include <iostream>
#include <string>
#include <stack>
#ifndef SHUNTINGYARD_H
#define SHUNTINGYARD_H
class ShuntingYard {
public:
void InputString();
void OutputString();
int precedence(char A, char B);
void ShuntingAlgorithm();
private:
std::string inString;
std::string outString;
std::stack<char> operatorStack;
std::stack<char> tokenStack;
};
#endif // SHUNTINGYARD_H
void InputString() {
std::cout << "Please enter an expression: ";
std::cin >> inString;
}
当我发现/有人解释解决方案时,我确定我会感到非常愚蠢,但我现在无法解决这个问题。
答案 0 :(得分:1)
尝试在函数实现之前添加类名和::运算符:
void ShuntingYard::InputString() {
这告诉编译器你正在实现一个名为ShuntingYard类的InputString()函数。否则它认为你试图声明一个与ShuntingYard分开的单独函数,因此不知道它的私有变量。
答案 1 :(得分:1)
当你这样做时 -
void InputString() {
std::cout << "Please enter an expression: ";
std::cin >> inString;
}
它只是一个裸功能而且它不是class ShuntingYard
的成员。
因此,它无法识别"instring"
因此,将InputString作为类的成员,然后将其定义为如下 -
void ShuntingYard::InputString() {
std::cout << "Please enter an expression: ";
std::cin >> inString;
}
注意:始终在文件末尾写#endif //SHUTTINGYARD_H
。它使您的代码更加标准化。