Я пытаюсь закодировать робота, и у меня возникает запутанная ситуация. Мне нужно передать массив указателей на объекты в конструктор класса. Я не могу, однако, заполнить массив, прежде чем передать его в конструктор. Для этого я хочу передать указатель на указанный массив и получить доступ к его элементам из указателя. Проблема в том, что я новичок в C++, поэтому я не уверен в синтаксисе. Могли бы вы, ребята, помочь мне?Как передать указатель на массив указателей в качестве аргумента функции?
Код для основного файла
class RobotDemo : public SimpleRobot
{
Joystick stick;
JoystickOne joyOne;
Victor *victors [8];
public:
RobotDemo(void):
stick(1),
joyOne(&stick)// these must be initialized in the same order
// as they are declared above.
/*It doesnt seem like I can do anything but initialize things here*/
{
/*Populate array with pointers to victors. Will need to update channels*/
for (int x = 1; x <= 7; x++) {
victors[x] = new Victor(x);
}
/*And I don't think I can initialize anything here*/
myRobot.SetExpiration(0.1);
}
/**
* Drive left & right motors for 2 seconds then stop
*/
void Autonomous(void)
{
}
/**
* Runs the motors with arcade steering.
*/
void OperatorControl(void)
{
myRobot.SetSafetyEnabled(true);
while (IsOperatorControl())
{
joyOne.testForActions(); /*Check joystick one for actions*/
Wait(0.005); // wait for a motor update time
}
}
/**
* Runs during test mode
*/
void Test() {
}
};
START_ROBOT_CLASS(RobotDemo);
Вот код класса JoystickInput, что класс JoystickOne расширяет
//the .h
#ifndef JOYSTICKINPUT_H
#define JOYSTICKINPUT_H
#include "WPILib.h"
class JoystickInput {
public:
JoystickInput(Joystick*);
JoystickInput(Joystick*, Victor* [8]);
Joystick * joystick;
bool buttons [10];
Victor** victors [8];
bool buttonClicked(int id);
virtual void testForActions();
};
#endif
//and the .cpp
#include "JoystickInput.h"
JoystickInput::JoystickInput(Joystick * joy) {
joystick = joy;
for (int x = 0; x < 10; x++) {
buttons[x] = false;
}
}
JoystickInput::JoystickInput(Joystick * joy, Victor* vicArray [8]) {
joystick = joy;
for (int x = 0; x < 10; x++) {
buttons[x] = false;
}
for (int n = 0; n <=7; n++) {
*victors[n] = vicArray[n];
}
}
bool JoystickInput::buttonClicked(int id) {
if (buttons[id] == false and joystick->GetRawButton(id) == true) {
buttons[id] = true;
return true;
} else if (buttons[id] == true and joystick->GetRawButton(id) == false) {
buttons[id] = false;
return false;
} else {
return false;
}
}
void JoystickInput::testForActions() {
}
, что я прошу вас, ребята, чтобы помочь мне сделать это переделки конструктор JoystickInput(), так что он также принимает указатель на массив указателей (на Victors) и выполняет методы на элементах массива. Googling это не оказалось ничего полезного. Я изучил его больше, но это было несколько дней, и я все еще вешал это.
Спасибо за помощь (а если нет, то, по крайней мере, прочитав мой пост)!
'typedef Victor * (* array_of_pointers) [8]; array_of_pointers victors; ' –
вы могли бы разработать? – pipsqueaker117
'Victor ** victors [8];' трудно оборачивать голову, это массив из восьми указателей на 'Victor *'? Это 3D-массив? Почему так много указателей? –