1

ロボットをコーディングしようとしていますが、混乱しています。オブジェクトへのポインターの配列をクラスのコンストラクターに渡す必要があります。ただし、コンストラクターに渡す前に配列を設定することはできません。これを解決するには、上記の配列にポインターを渡し、ポインターからその要素にアクセスします。問題は、私が 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);

JoystickOne クラスが拡張する JoystickInput クラスのコードを次に示します。

//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 への) ポインターの配列へのポインターも取り、配列の要素に対してメソッドを実行するようにすることです。グーグルで調べても、役に立つものは何も見つかりませんでした。もっと自分で調べたいのですが、数日経ちましたが、まだこれに夢中です。

助けてくれてありがとう(そうでない場合は、少なくとも私の投稿を読んでください)!

4

2 に答える 2

2

以下を使用できるはずです。

JoystickInput(Joystick*, Victor**, int);

vicArray をコンストラクターに渡すだけです。victors が長さ 8 の配列以外になる可能性がある場合、c++ はポインターから配列の長さを見つけることができないため、長さも引数として渡す必要があります。

于 2013-05-01T23:35:05.813 に答える