我有一个名为 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?
两个原因:
SymbolTable::Symbol::used
未在构造函数SymbolTable::Symbol(string, double)
中初始化,而是初始化局部变量。bool used = false;//This is my boolean flag
- 行首的 bool 使其声明了一个新的局部变量,隐藏了成员变量used
;删除它会引用成员变量bool
。或者,就像 Hans 在评论中提到的那样,将该行替换为this->used = false;
也会修复它。您没有启用
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 值打印为 true
或 false
而不是整数。
关于c++ - bool 赋值 204 为 false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19337197/