0

私はコードのこの部分を持っています:

struct IARM_DATA
{
    IARM_HANDLE handle;
    float position[6];  //May be joint or linear position
    float gripper_opening;
    IARM_LIFT_POSITION lift_position;
    bool foldIn;  //true if foldin and false if fold out
    bool openGripper;

    IARM_DATA(IARM_HANDLE _handle, bool _foldIn):handle(_handle),foldIn(_foldIn){}; 

    IARM_DATA(IARM_HANDLE _handle, IARM_LIFT_POSITION _lift_position):handle(_handle),
        lift_position(_lift_position){}; //handle, lift_position

    IARM_DATA(IARM_HANDLE _handle, volatile float _position[6], float _gripper_opening, IARM_LIFT_POSITION _lift_position):
    handle(_handle),gripper_opening(_gripper_opening), lift_position(_lift_position)
    {
        for(int i=0; i<6; i++)
            position[i] = _position[i];
    }; //handle, position, gripper_opening, lift_position

} ;

typedef IARM_RESULT (iArmDriver::*singleMvt)(IARM_DATA); //これはiArmDriverメソッドへのポインタです。

typedef struct {
    singleMvt mvt;
    IARM_DATA data;
} ONE_MVT;

そして、このようなキュー宣言:

std::queue<ONE_MVT> *iarmActions;

私の質問は、そのキューが原因で実行の問題に直面したことです。次のような動的な割り当てを行う必要があります。

iramActions = (std::queue<ONE_MVT> *)sife0f(std::queue<ONE_MVT> *);??

前もって感謝します

4

2 に答える 2

2

動的割り当ては使用しないでください。自動ストレージにキューを作成するだけです:

std::queue<ONE_MVT> iarmActions;

本当に動的割り当てが必要な場合 (私には疑問です)、スマート ポインターを使用してください。スマート ポインターの正確なタイプは、ユース ケースによって異なります。この例unique_ptrでは、通常はデフォルトの選択であるa を使用しています。

std::unique_ptr<std::queue<ONE_MVT>> iarmActions(new std::queue<ONE_MVT>());
于 2013-03-12T07:08:25.577 に答える
0
std::queue<ONE_MVT> *iarmActions;

なぜコンテナーへのポインターを気にするのですか? コンテナをそのまま持つことができます - 要素を持たない/サイズ0になるようにデフォルトで構築されますが、移入するまで多くのスペースを使用しません.

std::queue<ONE_MVT> iarmActions;
于 2013-03-12T07:09:44.147 に答える