Наследование Robot Race, которое не обновляет массив

Я работаю над программой, в которой предполагается, что на трассе участвуют 3 разных робота. Предполагается, что длина трека составляет 100. Я только что изучил наследование и все еще пытаюсь понять, как соединить элементы данных из одного .h в другой. Когда я запускаю свою программу, при вызове любого из моих роботов ничего не происходит. Я покажу один из них в качестве примера. Можете ли вы объяснить, как заставить свои движения обновлять гоночный 2D массив?

robotRace.h

#ifndef ROBOTRACE_H
#define ROBOTRACE_H

using namespace std;

class robotRace {

public:

robotRace (); //constructor
static const int rows = 5;
static const int columns = 100;

protected:

int race[rows][columns]; //initial base for race floor

};// end superclass robotRace that should do no movement

#endif

robotRace.cpp

#include <iostream>
#include "robotRace.h"
using namespace std;

robotRace :: robotRace() {

for (int i = 0; i < rows; i++)

for (int j= 0; j<columns; j++)

race[i][j] = ' ';

}//end constructor

Это один из роботов и их функции для обновления массива. Не уверен, как заставить это работать.

FunctionRobot.h

#ifndef FUNCTIONROBOT_H
#define FUNCTIONROBOT_H
#include "robotRace.h"
using namespace std;

class FunctionRobot : public robotRace{

public:
FunctionRobot();
int position(int);
void print();
protected:};

#endif

FunctionRobot.cpp

#include <iostream>
#include "FunctionRobot.h"#include <cmath>

using namespace std;

FunctionRobot :: FunctionRobot (): robotRace() {

int initPos =0;
race[initPos][0] = '*';
cout <<"Initial position of Function Robot is at begin of race."<<endl;

}

int FunctionRobot :: position(int place=0){

// log with a base 2 needs to be divided by the "x"// below is the Robots formula to determine each of their movements
double x = ( 2 * (log(place)/log(2)));
return (int) x;

}

void FunctionRobot :: print(){

for (int i;i=0; i<100; i++)
for (int j;j=0; j<1; j++)
race[position()][j];

}

это мой основной файл по запросу. Это основной формат. Я надеюсь сделать цикл while более практичным, чтобы пользователю не приходилось вводить 1.
Там также нет ошибки из моего кода. Он работает просто ничего не показывает.

main.cpp

#include <iostream>
#include "robotRace.h"#include "FunctionRobot.h"using namespace std;

int main() {

int userInput;

cout << "Welcome to the Robot Race of the year!" << endl;
cout << "For our contestants we have the amazing three!" << endl;
cout << "The contestants are Robots F, R and U" << endl;
cout << "Let the games begin! \n\n";

cout << "Enter 1 to begin. " << endl;
cin >> userInput;

FunctionRobot functionObj;
//functionObj.position();
//functionObj.print();
cout << "Ready... Set... Go!!" << endl;

while (userInput == 1) {

functionObj.position(4);
functionObj.print();

}  //end while

return 0;
}

0

Решение

Ваш print() выходит за пределы:

void FunctionRobot :: print(){

for (int i; i<100; i++)
for (int j; j<1; j++)
race[position()][j];

}

j не инициализируется. Вы могли бы попробовать int j = 0 для начала. Аналогично для i,

Более того, вы знаете, что эта функция называется PRINT, но ничего не печатает, на самом деле она ничего не делает, кроме вызова position(),


int FunctionRobot :: position(int place=0){

// log with a base 2 needs to be divided by the "x"// below is the Robots formula to determine each of their movements
double x = ( 2 * (log(place)/log(2))); <-------- now x is a double
return (int) x;                        <-------- now x is an integer, are you sure about that?

}

Потеря точности происходит здесь. Скажем так x присваивается значение 3,14. Затем вы преобразуете его (приведение произойдет автоматически, поскольку возвращаемый тип функции также является целым числом) в целое число, поэтому оно будет преобразовано в 3, что приведет к потере точности.


Около main.cpp

Вы вызываете пользователя для ввода 1, а затем у вас есть:

  while (userInput == 1) {

functionObj.position(4);
functionObj.print();

}  //end while

но userInput не будет изменено, таким образом, вы работаете в бесконечный цикл.

1

Другие решения


По вопросам рекламы [email protected]