我将尝试使我的问题尽可能简洁:
我有3个班级,一个机器人班,一个Point类和一个世界班。
class Point
{
private:
int x;
int y;
public:
void set(int x, int y)
{
this->x = x;
this->y = y;
}
int getX()
{
return x;
}
int getY()
{
return y;
}
};
class Robot{
private:
Point roboLocale;
public:
Robot()
{
}
void init()
{
roboLocale.set(0, 0);
}
class World
{
private:
char arr[10][10];
public:
World()
{
std::fill(arr[0], arr[0] + 10 * 10, ' ');
}
void injectRobot()
{
arr[roboLocale.getX()][roboLocale.getY()] = '@'; // would like to access robotLocales x and y coords
}
void displayField()
{
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 10; j++)
{
std::cout << "[" << arr[i][j] << "]";
}
std::cout << std::endl;
}
}
};
int main()
{
World field;
Robot robot;
robot.init();
field.injectRobot();
field.displayField();
}
在void injectRobot()
下的World类中,我试图访问robotLocale
的getX()和getY()成员函数,以将机器人“注入”到我的World::arr
中。我根本不知道该怎么做,或者甚至可能。任何帮助将不胜感激。
答案 0 :(得分:1)
您的injectRobot
不知道任何Robot
实例。它应该如何知道程序的其他位置(在您的main
中)有一个实例,该实例可用于获取{strong> private 的roboLocale
对象Robot
类?
injectRobot
必须具有一个函数参数,您要在其中传递要注入的Robot
实例(如果您唯一感兴趣的是,至少传递其位置)。injectRobot
必须能够实际获取存储在该Robot
对象中的位置信息。您可以尝试:
#include <array>
#include <iostream>
class Point
{
private:
int _x{};
int _y{};
public:
// Default constructor to prevent uninitialized values
Point() = default;
Point(int x, int y)
: _x(x), _y(y) { }
void set(int x, int y)
{
_x = x;
_y = y;
}
int x() const { return _x; }
int y() const { return _y; }
};
class Robot
{
private:
Point _robolocale;
public:
Robot() = default;
Robot(int x, int y) : _robolocale(x, y) {}
Point const& pos() const { return _robolocale; }
};
class World
{
private:
char arr[10][10];
public:
World()
{
std::fill(arr[0], arr[0] + 10 * 10, ' ');
}
// Which robot should be injected?
// We need to pass a robot in because otherwise there is none to inject
void injectRobot(Robot const& r)
{
arr[r.pos().x()][r.pos().y()] = '@'; // would like to access robotLocales x and y coords
}
void displayField()
{
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 10; j++)
{
std::cout << "[" << arr[i][j] << "]";
}
std::cout << std::endl;
}
}
};
int main()
{
World field;
Robot robot1;
Robot robot2(7, 4);
field.injectRobot(robot1);
field.injectRobot(robot2);
field.displayField();
}