【问题标题】:Why can't I set this member variable in this member function?为什么我不能在这个成员函数中设置这个成员变量?
【发布时间】:2016-05-28 03:36:47
【问题描述】:

所以在这个函数中,它没有将突破设置为 6。当它打印时,我得到“突破”,后面没有数字。

void tokens::driver()
{
   //comment(getInput());
  // std::cout<< "driver working"<<std::endl;
  breakout=6;
  std::cout<< "breakout"<<breakout<< std::endl;
  integerConstant(breakout);
  //symbol(getInput());
  std::cout<< "breakout"<<breakout<< std::endl;
}

我的h文件是这样的:

class tokens
{
  public:
  void driver();
  char breakout;

  private:
  char getInput();
  char integerConstant(char input);
  char symbol(char input);
  char whatWord(char input);
  char comment(char input);
  bool symbolMap(char input);
  bool keywordMap(std::string input);
};

【问题讨论】:

  • 因为6 != '6'
  • @user657267,这有什么关系? OP 正在使用cout
  • @BatCoder ... operator&lt;&lt;characters 有重载。
  • @BatCoder 可能是因为char 的值为6 是不可打印字符(ACK),而'6' 的值为54。 (考虑 ASCII 字符时)

标签: c++ function class variables output


【解决方案1】:
 breakout=6;

上述语句将6的ascii值分配给breakout,即ACK,这是不可打印的。

【讨论】:

    【解决方案2】:

    原来breakout设置为6,作为字符编码值是不可打印的ASCII字符。

    char 值6 传递给cout 的一个可能效果是什么都不显示。将其作为整数传递的一个很好的小技巧是使用前缀 + 运算符,如下所示:+breakout。然后你应该会看到值 6。

    integerConstant 中,单个参数是按值传递的。这会复制实际参数。对副本所做的更改不会反映在实际参数中。


    如果您希望breakout 成为字符“6”,那么您应该将其指定为用单引号括起来,如下所示:

    breakout = '6';
    

    字符“6”的 ASCII 值是 48 + 6 = 54,所以除了一些旧的 IBM 大型机(使用 EBCDIC 而不是 ASCII),上面的赋值等价于

    breakout = 54;
    

    但是写'6'比写54更清楚。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-16
      • 1970-01-01
      相关资源
      最近更新 更多