c++ - bool 赋值 204 为 false

标签 c++

我有一个名为 Symbol 的对象,它表示一个变量。 Symbol 具有 bool 属性 used,它被初始化为 false。如果调用它来解决函数以表明它已被使用,则此条件将更改为 true。由于某些原因,当 Symbol 未使用且 used 从未更改为 true 时,它​​返回值 204 而不是 false

这是 SymbolTable.h,我在其中定义了一个 Symbol:

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

为什么会这样?

最佳答案

Why could this be happening?

两个原因:

  1. SymbolTable::Symbol::used 未在构造函数 SymbolTable::Symbol(string, double) 中初始化,而是初始化局部变量。

    bool used = false;//This is my boolean flag - 行首的 bool 使其声明了一个新的局部变量,隐藏了成员变量 used;删除它会引用成员变量bool。或者,就像 Hans 在评论中提到的那样,将该行替换为 this->used = false; 也会修复它。

  2. 您没有启用 std::boolalpha 标志,因此 std::cout 将仅将 bool 值打印为整数;因此正在打印基础整数值;在本例中,它是一个未初始化的随机值 (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 值打印为 truefalse 而不是整数。

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

相关文章:

c++ - const 和 static 一起转换

C++ 意外行为(我的临时对象在哪里!?)

c++ - 模板模板参数简单示例

c++ - 使用 VC++ 2008 编译 Windows 窗体应用程序时出现 LNK2001 错误

c++ - 如何将指针值转换为 QString?

c++ - 增加 TCP 窗口大小

c++ - 本身就是模板的特化

c++ - 为什么将树存储为连续的内存块?

c++ - Mat,ml opencv 中的训练数据

c++ - 函数的执行时间在运行时减少。 (C++) 为什么?