我有一个称为Symbol的对象,它表示一个变量。 Symbol具有 bool(boolean) 属性used,即initialized as false。如果调用此条件来解决某个函数以表明它已被使用,则此条件会更改为true。由于某种原因,当Symbol未使用且used从未更改为true时,返回值204而不是false

这是我定义符号的SymbolTable.h:

class SymbolTable  {
public:
    SymbolTable() {}
    void insert(string variable, double value);
    double lookUp(string variable) ;
    bool unusedVar() ;
private:
    struct Symbol  {
    Symbol(string variable, double value)
    {
        this->variable = variable;
        this->value = value;
        bool used = false;//This is my boolean flag
    }
    string variable;
    double value;
    bool used;
};
...

每当我从SymbolTable中查找一个值以插入方程式时,我都会将used设置为true:
double SymbolTable::lookUp(string variable)  {
    for (int i = 0; i < elements.size(); i++) {
        if (elements[i].variable == variable) {
        elements[i].used = true;//Right here it changes to true
        return elements[i].value;
    }
...

稍后,当我尝试检测是否还有错误时,它将无法工作。当我打印used的值时,它会打印 204 !
bool SymbolTable::unusedVar() {// returns error if Var is not used
int count = 0;
for (int i = 0; i < elements.size(); i++) {
    std::cout << "Variable: " << elements[i].variable << " was " << elements[i].used << std::endl;
    if ( !elements[i].used ) {
        std::cout << "Warning: A variable was not used" << std::endl;
        return true;
    }
}
return false;
}

为什么会发生这种情况?

最佳答案



两个原因:

  • SymbolTable::Symbol::used未在构造函数SymbolTable::Symbol(string, double)中初始化,而是在初始化局部变量。
    bool used = false;//This is my boolean flag-行首的 bool(boolean) 值使它成为新局部变量的声明,并隐藏成员变量used;删除它将引用成员变量bool。另外,就像汉斯在评论中提到的那样,用this->used = false;替换该行也可以解决。
  • 您没有启用std::boolalpha标志,因此std::cout将 bool(boolean) 值仅打印为整数;因此,基础整数值将被打印;在这种情况下,它是一个未初始化的随机值(204)。

  • 这应该解决它:
    struct Symbol {
        Symbol(string variable, double value) : variable(variable), value(value), used(false)
        {
        }
    ...
    
    std::cout << "Variable: " << elements[i].variable << " was " << std::boolalpha << elements[i].used << std::endl;
    

    在构造函数中,我使用了initialization lists, which is better,而不是按成员分配。在打印代码中,我使用 std::boolalpha 将 bool(boolean) 值打印为truefalse而不是整数。

    关于c++ - bool 值为204时为false,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19337197/

    10-09 13:34