“inString未在此范围内声明”

时间:2015-02-25 18:43:24

标签: c++

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

当我发现/有人解释解决方案时,我确定我会感到非常愚蠢,但我现在无法解决这个问题。

2 个答案:

答案 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。它使您的代码更加标准化。