Хорошо, я почти закончил с моим упражнением и застрял на том, как заставить каждую кость бросать свой собственный случайный номер. Программа на самом деле бросает случайные числа, просто каждый раз, когда вы бросаете оба кубика, всегда бросаются одинаковые точные числа. И эта простая, но все же проблема царапин на голове возникла, по некоторым причинам у меня также есть
cout << "Adding both dices up you rolled a total of: " << totalScore() << "." << endl;
Одноклассник также сказал мне, что мой faceValue является недопустимым значением и должно быть установлено в допустимое значение. Я не совсем понял, что он имел в виду, и я уверен, что это отбросит (не так много) некоторые из моих оценок.
#include "stdafx.h"#include <iostream>
#include <string>
#include <ctime>
using namespace std;
class PairOfDice
{private:
int diceOne;
int diceTwo;
int score;
int faceVaule;
public:
PairOfDice(){
srand(time(NULL));
roll();
}
void roll(){
diceOne = (rand() % 6) + 1;
diceTwo = (rand() % 6) + 1;
setdiceOne(diceOne);
setdiceTwo(diceTwo);
}void setdiceOne(int value){
faceVaule = value;
}
int getdiceOne(){
return faceVaule;
}
void setdiceTwo(int value){
faceVaule = value;
}
int getdiceTwo(){
return faceVaule;
}
void totalScore(){
score = diceOne + diceTwo;
}
void display(){
cout << "The first Dice rolled a " << getdiceOne() << " ." << endl;
cout << "The second Dice rolled a " << getdiceTwo() << " ." << endl;
// adding both dices gives an: No operator " < < " matches these operands
cout << "Adding both dices up you rolled a total of: " << totalScore() << "." << endl;
}};
int _tmain(int argc, _TCHAR* argv[])
{
PairOfDice game;
game.roll();
game.display();
game.totalScore();return 0;
}
Прежде всего: вы бросаете два кубика, сохраняете результаты в dice1 и dice2, но затем отправляете эти значения двум функциям, которые помещают значение в переменную faceValue.
Логично, что возвращение значения вернет только второе значение кости, потому что это то, что вы в последний раз вводили в faceValue.
Вот почему одинаковые значения показаны для обеих костей.
Теперь об ошибке: ваша функция totalScore возвращает пустое место, в то время как << Оператор ожидает какой-то тип.
Функция totalScore добавляет две кости (кстати, правильные значения) и помещает результат в счет, но нигде не возвращается значение в счете.
Ваш код действительно грязный. У вас не должно быть одной переменной-члена (faceValue), содержащей копию двух разных значений. У вас не должно быть этого участника вообще. Просто используйте значения diceOne и diceTwo.
Когда значения установлены (= rand ()% 6 + 1), их не следует устанавливать заново, вызывая функцию set: либо создайте правильную функцию set (потому что эта не является правильной), и установите случайное значение как параметр или установите переменные-члены diceOne и diceTwo непосредственно в конструкторе, как вы уже это сделали. Не делай обоих.
При возврате суммы двух кубиков, почему бы просто не вернуть эту сумму (подсказка: функция totalScore должна вернуть что-то типа int). Почему вы помещаете суммированный результат в переменную-член? В этом нет необходимости.
Я мог бы опубликовать исправленный код здесь, но, похоже, вам действительно нужно изучить это самостоятельно.
Изменить: И, кстати: как указано выше, научиться использовать отладчик. Вскоре вы обнаружите, что то, что я вам говорю, правильно. Вы заметите, что faceValue сначала получает значение diceOne, а затем значение diceTwo, никогда не возвращая значение diceOne.
Других решений пока нет …