布尔getter函数不起作用

时间:2014-01-15 14:00:57

标签: c++ constructor setter getter

我有一个带有bool和getter / setter的简单类:

tile.h

class Tile {

public:
  Tile();
  virtual ~Tile();
  bool isActive() const { return isActive_; };
  void setActive(bool status) { isActive_ = status; };

private:
  bool isActive_;

};

tile.cpp

#include "tile.h"

Tile::Tile() : isActive_(false) {
}

Tile::~Tile() {
}

现在,当我在main函数中创建一个类对象并使用isActive()函数访问isActive_ bool时,它会正确打印它。

但是当我在创建磁贴后使用setActive函数然后打印出上面的状态时,它不会更改isActive_变量并始终保持在Tile构造函数中指定的值。

示例main.cpp

#include "tile.h"
#include <string>
#include <iostream>

int main() {

  Tile tile;

  // will print the correct thing, based on what I set in the constructor
  if (tile.isActive()) {
    std::cout << "is active" << std::endl;
  } else {
    std::cout << "is NOT active" << std::endl;
  }

  tile.setActive(true);

  // will NOT print the correct thing. it will print what I set in its constructor
  if (tile.isActive()) {
    std::cout << "is active" << std::endl;
  } else {
    std::cout << "is NOT active" << std::endl;
  }

  return 0;

}

我想我会疯了,我不能为我的生活弄清楚我做错了什么???

另外,虽然我在这里,但是调用(tile.isActive())和(tile.isActive()== true)之间是否有区别,因为在过去,当前者不起作用时,后者做了,我不明白为什么。顺便说一句,在这个例子中,上述两个都没有工作:(

编辑:

你是对的,确实有效。非常感谢您的回复!

我只是愚蠢。谢谢&lt; 3

2 个答案:

答案 0 :(得分:1)

  

调用(tile.isActive())和(tile.sActive()== true)

之间有区别吗?

对于这种情况 - 不,根本没有区别。


  

因为在过去,当前者不起作用时,后者做了,我不知道为什么

因为if( something )true,当且仅当此something被评估为true时(意思是 - 与0不同)。所以,这在很大程度上取决于具体情况。


关于这个问题 - 尝试重建你的项目。一切都很好。

答案 1 :(得分:1)

一切看起来都不错。我唯一看到的是在main.cpp中你包含“tile”而不是“tile.h”。也许您有一个旧版本的tile.h,其中有“tile”名称?