增量变量"从未使用"?

时间:2018-02-10 22:23:52

标签: c++ c increment unused-variables

我对C ++缺乏经验,而且我将我用C编写的程序转换为C ++。我有一个RollDice函数,它从文本文件中读取我读入的数字并使用它们来生成数字。这是C中的函数:

void rollDice(Move *move, GameState *game_state) {
    int diceNum1 = 0;
    int diceNum2 = 0;
    int randomNumber1 = 0;
    int randomNumber2 = 0;
    randomNumber1 = game_state->randomNums[game_state->current_roll]; //gets the random number from the array randomNum (which holds the numbers from the text file), at index "current_roll"
    game_state->current_roll++; //increments so the next random number will be the next number in the array
    diceNum1 = 1 + (randomNumber1 % (1 + 6 - 1));
    randomNumber2 = game_state->randomNums[game_state->current_roll];
    game_state->current_roll++;
    diceNum2 = 1 + (randomNumber2 % (1 + 6 - 1));
    move->dice_sum = diceNum1 + diceNum2;
    printf("You rolled a %d!\n", move->dice_sum);
}

当我运行它时,这就是我想要它的方式。现在,当我将程序转换为C ++时,我不得不改变一切。我的参数现在通过引用传递,我创建了一个向量来存储文本文件中的随机数列表:

void rollDice(Move& move, GameState& game_state) {
    std:: vector<int> randomNums = game_state.getRandomNums();
    int current_roll = game_state.getCurrentRoll();
    int diceNum1 = 0;
    int diceNum2 = 0;
    int randomNumber1 = 0;
    int randomNumber2 = 0;
    randomNumber1 = randomNums.at(current_roll);
    current_roll++;
    diceNum1 = 1 + (randomNumber1 % (1 + 6 - 1));
    randomNumber2 = randomNums.at(current_roll);
    current_roll++;   //this line is grayed out and says "this value is never used"
    diceNum2 = 1 + (randomNumber2 % (1 + 6 - 1));
    move.dice_sum = diceNum1 + diceNum2;
    std:: cout << "You rolled a " << move.dice_sum << "!\n";
}

我的代码告诉我第二次增加current_roll时它未被使用。我的C代码没有发生这种情况,为什么会发生这种情况,我该如何解决呢?我完全迷失了。

1 个答案:

答案 0 :(得分:6)

它从未被使用,因为你写入变量,但从未读过它。拥有一个你从未读过的变量实际上毫无意义。

大概你的game_state.getCurrentRoll函数返回一个整数,当你存储它时,你存储(而不是对值的引用),因此递增它不会增加当前值在game_state内滚动,您应该向game_state makeRoll添加一个函数,例如,game_states内部current_roll值增加。

这与使用current_roll直接递增game_state->current_roll++ 的C代码不同(或者您可以将game_state.current_roll公开并以相同方式递增就像你的C代码一样。)

从你的评论中我假设你有一些课程:

class GameState {
private:
    int current_roll;
    ...
public:
    int getCurrentRoll() {
        return current_roll;
    }
    ...
}

您需要做的就是在课堂上添加另一个功能来增加current_roll

class GameState {
private:
    int current_roll;
    ...
public:
    int getCurrentRoll() {
        return current_roll;
    }
    void makeRoll() {
        current_roll++;
    }
    ...
}

然后你可以正常调用它。

关于错误的评论中关于您的新问题:

  

参数类型不匹配:对'int'类型的有符号值使用'unsigned long'。

这是因为at的签名是std::vector::at( size_type pos );也就是说,它期望类型size_type的值是无符号整数类型,而不是int '正在使用哪个签名。 This帖子可能会有帮助。