Странное поведение с логическим значением

Я разрабатываю симулятор робота для университетского проекта, и я столкнулся с большой проблемой для обнаружения столкновений. Вот мой заголовочный файл robot.h:

#ifndef robot_h
#define robot_h

#include <vector>

enum direction
{
UP,DOWN,LEFT,RIGHT
};

enum motor
{
STOP,SLOW,FAST
};

class robot
{
public:
robot();

char bot; // The bot onscreen
int getX(); // The X position of robot
int getY(); // The Y position of robot

int dir; // The direction the robot is going

bool touchSensor; // Boolean value if collision
int lightSensor; // light sensor between 10-100
int motorA; // Motor A between 0, 1 and 2
int motorB; // Motor A between 0, 1 and 2
void detection(int x, int y);

void getReturnObject();
bool returnObjectDash;
bool returnObjectLine;

void move(); // Moving the robot
void draw(); // Drawing the robot on screen
void update(); // Updating the robot position

private:
int positionX; // Starting X value
int positionY; // Starting Y value
};

#endif

По сути, у меня есть два логических значения:
returnObjectDash;а также returnObjectLine, У меня есть этот код в моем файле matrix.cpp:

void matrix::detection(int x, int y)
{
if(vector2D[x][y]=='-')
{
returnObjectDash=true;
system("pause");
}
else
{
returnObjectDash=false;
}
if(vector2D[x][y]=='|')
{
returnObjectLine=true;
}
else
{
returnObjectLine=false;
}
}

Внутри моего robot.cpp у меня есть этот код, который получает два логических значения и выводит их на консоль:

void robot::getReturnObject()
{
if(returnObjectDash==true)
{
std::cout<<"Dash\n";
//dir=DOWN;
}
if(returnObjectLine==true)
{
std::cout<<"Line\n";
//dir=DOWN;
}
}

Это мой main.cpp

int main()
{
robot r;

while(true)
{
matrix m;
m.robotPosition(r.getX(), r.getY());
m.update(); // vector2D init and draw
m.detection(m.getX(), m.getY());
r.update();
Sleep(250);
}
}

Я устанавливаю значение по умолчанию для моих двух логических переменных в конструкторе по умолчанию для matrix.cpp в false. Когда я нажимаю кнопку паузы и отлаживаюсь, мне кажется, что я получаю два разных результата. Для моей матрицы это возвращает false, хотя для моего робота это возвращает true, как будто моя программа создает две разные переменные. Если кто-то может пролить свет на это странное поведение, то, пожалуйста, расскажите! Спасибо

1

Решение

Ваша программа делает два разных значения, потому что это имеет два разных значения. matrix класс, по-видимому, имеет свою собственную логическую переменную, matrix::returnObjectDashи класс робота имеет свою собственную переменную, robot::returnObjectDash, Установка переменной в одном экземпляре одного класса не влияет на переменные в любых других классах (или любых других экземплярах).

1

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

Вы не предоставили код для своего матричного класса, однако, исходя из void matrix::detection(int x, int y) Я предполагаю, что у вас есть метод, называемый обнаружением, и что вы объявили те же поля returnObjectLine а также returnObjectDash,

Вы правы, предполагая, что существует две версии этих переменных: одна из этих версий находится внутри вашего объекта матрицы, а другая — внутри вашего объекта робота.

Мало того, вы можете (и обычно делаете!) Иметь более одного объекта матрицы / робота. Каждая из них будет иметь свою собственную копию этих переменных, и изменение одной из них не повлияет на другие.

1

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