質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

1回答

3942閲覧

error: invalid use of のコンパイルエラーを解決したいです。c++初心者ですがよろしくお願いします。

tasuketekudasai

総合スコア7

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2019/08/04 13:23

編集2019/08/05 00:22
現在、C++にて移動ロボットのシミュレーションを作成しております。 プログラミング等が初心者なもので、わかりづらい質問をしてしまっているかもしれませんが、ご教授して頂ければ嬉しく思います。 また、大変申し訳ないのですが、こういう質問をするのも初めてでして、どの部分を最低限お見せすればいいかわからないためすべてのコードを投稿させていただきます。 このようなエラーメッセージが出てきたのですが、どのようにすればコンパイルが通るか教えてください。 よろしくお願いします。 ■■な機能を実装中に以下のエラーメッセージが発生しました。 ### 発生している問題・エラーメッセージ

エラーメッセージ

error: invalid use of ‘struct argos::CCI_RadiosActuator::SInterface’ m_pcRadiosActuator->SInterface(word,getdata); ^~~~~~~~~~ ### 該当のソースコード ```ここに言語名を入力

//cppファイル内のものです。

#include "footbot_diffusion.h"
#include <argos3/core/utility/configuration/argos_configuration.h>
#include <argos3/core/utility/math/vector2.h>
#include <stdio.h>
#include <math.h>
#include <argos3/core/utility/math/angles.h>
#include <argos3/core/utility/math/vector3.h>
//
/
/

double v_r,v_l;
double v_ab;
double x[3];
double q[4];
double yaw;
double yaw_m1;
double yaw_m2;

CFootBotDiffusion::CFootBotDiffusion() :
m_pcWheels(NULL), //車輪の情報では?
m_pcProximity(NULL),//センサーというオブジェクトでは?
m_pcPositioning(NULL),//ポジションセンサーのオブジェクト化
m_pcRadiosActuator(NULL),//送信機のオブジェクト化
m_pcRadiosSensors(NULL), //受信機のオブジェクト化
m_cAlpha(10.0f),
m_fDelta(0.5f),
m_fWheelVelocity(2.5f), //おそらく車輪の速度を2.5m/sに設定しているのでは?
m_cGoStraightAngleRange(-ToRadians(m_cAlpha),
ToRadians(m_cAlpha)){}

//
/
/

void CFootBotDiffusion::Init(TConfigurationNode& t_node) {
//footbot_diffusion.h内のinit関数を呼び出すそうです。初期化を行う関数だそうです。

m_pcWheels = GetActuator<CCI_DifferentialSteeringActuator>("differential_steering");
m_pcProximity = GetSensor <CCI_FootBotProximitySensor >("footbot_proximity" );
m_pcPositioning = GetSensor < CCI_PositioningSensor >("positioning");
m_pcRadiosActuator = GetActuator<CCI_RadiosActuator>("Radios");
m_pcRadiosSensors = GetSensor <CCI_RadiosSensor>("Radios");

GetNodeAttributeOrDefault(t_node, "alpha", m_cAlpha, m_cAlpha);
m_cGoStraightAngleRange.Set(-ToRadians(m_cAlpha), ToRadians(m_cAlpha));
GetNodeAttributeOrDefault(t_node, "delta", m_fDelta, m_fDelta);
GetNodeAttributeOrDefault(t_node, "velocity", m_fWheelVelocity, m_fWheelVelocity);

v_ab=5;
v_r=5.0;
v_l=5.0;

}

void CFootBotDiffusion::ControlStep() {
const CCI_FootBotProximitySensor::TReadings& tProxReads = m_pcProximity->GetReadings();
CVector2 cAccumulator; //CVector2のオブジェクト化では?

for(size_t i = 0; i < tProxReads.size(); ++i) {
cAccumulator += CVector2(tProxReads[i].Value, tProxReads[i].Angle);
}
cAccumulator /= tProxReads.size();
CRadians cAngle; //CRadiansのオブジェクト化では?
cAngle = cAccumulator.Angle();
const CCI_PositioningSensor::SReading& tPositioningReads = m_pcPositioning->GetReading();

x[0]=tPositioningReads.Position.GetX();
x[1]=tPositioningReads.Position.GetY();
x[2]=tPositioningReads.Position.GetZ();

q[0]=tPositioningReads.Orientation.GetW();
q[1]=tPositioningReads.Orientation.GetX();
q[2]=tPositioningReads.Orientation.GetY();
q[3]=tPositioningReads.Orientation.GetZ();

yaw_m1=2*(q[0]*q[3]+q[1]+q[2]);
yaw_m2=pow(q[0],2)+pow(q[1],2)-pow(q[2],2)-pow(q[3],2);
yaw=atan2(yaw_m1,yaw_m2);

const CCI_RadiosActuator::SInterface::TVector& tRadiosAct = m_pcRadiosActuator->GetInterfaces();
const CCI_RadiosSensor::SInterface::TVector& tRadiosSen = m_pcRadiosSensors->GetInterfaces();
std::string word;
std::vector<CByteArray> getdata;

word="TURAI";
getdata={1,1};
m_pcRadiosActuator->SInterface(word,getdata);

if(m_cGoStraightAngleRange.WithinMinBoundIncludedMaxBoundIncluded(cAngle) &&
cAccumulator.Length() < m_fDelta ) {
m_pcWheels->SetLinearVelocity(m_fWheelVelocity+v_l, m_fWheelVelocity+v_r);
}
else {
/* Turn, depending on the sign of the angle */
if(cAngle.GetValue() > 0.0f) {
m_pcWheels->SetLinearVelocity(m_fWheelVelocity+v_ab, 0.0f);
}
else {
m_pcWheels->SetLinearVelocity(0.0f, m_fWheelVelocity+v_ab);
}
}
}

//ヘッダーファイルの部分です。
#ifndef FOOTBOT_DIFFUSION_H
#define FOOTBOT_DIFFUSION_H
#include <argos3/core/control_interface/ci_controller.h>
#include <argos3/plugins/robots/generic/control_interface/ci_differential_steering_actuator.h>
#include <argos3/plugins/robots/foot-bot/control_interface/ci_footbot_proximity_sensor.h>
#include <argos3/plugins/robots/generic/control_interface/ci_positioning_sensor.h>
#include <argos3/plugins/robots/generic/control_interface/ci_radios_actuator.h>
#include <argos3/plugins/robots/generic/control_interface/ci_radios_sensor.h>

using namespace argos;

class CFootBotDiffusion : public CCI_Controller {

public:
CFootBotDiffusion();
virtual ~CFootBotDiffusion() {}

virtual void Init(TConfigurationNode& t_node);

virtual void ControlStep();

virtual void Reset() {}

virtual void Destroy() {}

private:
CCI_DifferentialSteeringActuator* m_pcWheels;
CCI_FootBotProximitySensor* m_pcProximity;
CCI_PositioningSensor* m_pcPositioning;
CCI_RadiosActuator* m_pcRadiosActuator;
CCI_RadiosSensor* m_pcRadiosSensors;

CDegrees m_cAlpha;
Real m_fDelta;
Real m_fWheelVelocity;
CRange<CRadians> m_cGoStraightAngleRange;

};

#endif

//#include <argos3/plugins/robots/generic/control_interface/ci_radios_actuator.h>の中身です。
#ifndef CI_RADIOS_ACTUATOR_H
#define CI_RADIOS_ACTUATOR_H

namespace argos {
class CCI_RadiosActuator;
}

#include <argos3/core/control_interface/ci_actuator.h>
#include <argos3/core/utility/datatypes/byte_array.h>

namespace argos {

class CCI_RadiosActuator : virtual public CCI_Actuator {

public:

struct SInterface { SInterface(const std::string& str_id, const std::vector<CByteArray>& vec_data = {}) : Id(str_id), Data(vec_data) {} std::string Id; std::vector<CByteArray> Data; using TVector = std::vector<SInterface>; };

public:

/** * Constructor */ CCI_RadiosActuator() {} /** * Destructor. */ virtual ~CCI_RadiosActuator() {}

public:

/** * Returns a reference to the radio interfaces. * @return A reference to the radio interfaces. */ SInterface::TVector& GetInterfaces();

#ifdef ARGOS_WITH_LUA
virtual void CreateLuaState(lua_State* pt_lua_state);
#endif

protected:

SInterface::TVector m_vecInterfaces;

};
}

#endif

### 試したこと ここに問題に対して試したことを記載してください。 ### 補足情報(FW/ツールのバージョンなど) ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_waiwai

2019/08/04 13:27

このままではコードが見れません 質問を編集して、<code>ボタン、出てくる’’’の枠の中にコードを貼り付けてください
tasuketekudasai

2019/08/05 00:25

ご指摘頂きありがとうございます。 並びに返信遅れてしまい申し訳ないです。 教えて頂いたとおり編集致しました。
guest

回答1

0

ベストアンサー

コンストラクタSInterfaceを明示的に呼んではいけないためエラーとなっています。
すみませんコードを良く見ていませんでした。この場合はコンストラクタを呼んでいるわけではありませんね。
型名の使用方法として正しくないためエラーとなっています。

どこへ値を格納しようとしているのでしょうか。

やりたい事はこうですか?

C++

1CCI_RadiosActuator::SInterface::TVector& tRadiosAct = m_pcRadiosActuator->GetInterfaces(); 2tRadiosAct.push_back(CCI_RadiosActuator::SInterface(word,getdata));

投稿2019/08/05 02:44

編集2019/08/05 13:44
SHOMI

総合スコア4079

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tasuketekudasai

2019/08/05 05:33

仰るとおりであります。 このようにやってみたらコンパイルが通りました。 ありがとうございます。本当に助かりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問