что вызвало получение ошибки: «нет подходящей функции для проблемы вызова» здесь - PullRequest
0 голосов
/ 14 апреля 2020

У меня есть фрагмент кода из здесь , где следующий объект сделан в main () и используется его атрибутом:

actionlib::SimpleActionClient<actionlib_tutorials::FibonacciAction> ac("fibonacci", true);
actionlib_tutorials::FibonacciGoal goal;
ac.sendGoal(goal);

Будучи новичком в c ++, я думаю, что иметь очень четкую синтаксическую ошибку, которая должна быть видна любому, кто немного опытнее меня.

В моих собственных кодах я считаю заголовочный файл, в котором я хочу сначала объявить "a c", а затем использовать его в другом файле cpp в классе. Однако, будучи новичком в c ++, я довольно потерян, в чем заключается моя ошибка. То, как я пытался изменить заголовочный файл, выглядит следующим образом. "..." - это просто части кода, которые я удалил здесь для удобства чтения, и я уверен, что ошибка не выдает:

...
#include <actionlib/client/simple_action_client.h>
#include <actionlib/client/terminal_state.h>
#include "dummy_sim2/JointsStateAction.h"

class ROBOTHardwareInterface : public hardware_interface::RobotHW 
{
    public:
       ...

    protected:
        actionlib::SimpleActionClient<dummy_sim2::JointsStateAction> ac;//("muj_simread_joint_state", true);

    ...
};

, а мой файл cpp выглядит так, как я конечно, как изменить его, чтобы иметь c .sendGoal (цель) в функции read ():

#include <muj_hw.h>
#include <iostream>
#include <string>
#include <fstream> 

ROBOTHardwareInterface::ROBOTHardwareInterface(ros::NodeHandle& nh) : nh_(nh) {
    init();
    ...
}

ROBOTHardwareInterface::~ROBOTHardwareInterface() {
}

void ROBOTHardwareInterface::init() {

 ...
}

void ROBOTHardwareInterface::update(const ros::TimerEvent& e) {
    read();
}

void ROBOTHardwareInterface::read() {
    //dummy_sim2::JointsStateActionGoal goal;
    //ac.sendGoal(goal);
    ...

                                  }

void ROBOTHardwareInterface::write(ros::Duration elapsed_time) {

                                                                }

int main(int argc, char** argv) 
{
    ros::init(argc, argv, "mujoco_hardware_interface");
    ros::NodeHandle nh;
    ROBOTHardwareInterface ROBOT(nh);
    ros::MultiThreadedSpinner spinner(4);
    spinner.spin();
    ros::spin();
    return 0;
}

и позже я получаю эту ошибку:

/home/alireza/amira/ws/src/amira_simulation/dummy_sim2/src/muj_hw_interface_node.cpp: In constructor ‘ROBOTHardwareInterface::ROBOTHardwareInterface(ros::NodeHandle&)’:
/home/alireza/amira/ws/src/amira_simulation/dummy_sim2/src/muj_hw_interface_node.cpp:9:77: error: no matching function for call to ‘actionlib::SimpleActionClient<dummy_sim2::JointsStateAction_<std::allocator<void> > >::SimpleActionClient()’
 ROBOTHardwareInterface::ROBOTHardwareInterface(ros::NodeHandle& nh) : nh_(nh) {
                                                                             ^
In file included from /home/alireza/amira/ws/src/amira_simulation/dummy_sim2/include/muj_hw.h:15:0,
                 from /home/alireza/amira/ws/src/amira_simulation/dummy_sim2/src/muj_hw_interface_node.cpp:1:
/opt/ros/melodic/include/actionlib/client/simple_action_client.h:109:3: note: candidate: actionlib::SimpleActionClient<ActionSpec>::SimpleActionClient(ros::NodeHandle&, const string&, bool) [with ActionSpec = dummy_sim2::JointsStateAction_<std::allocator<void> >; std::__cxx11::string = std::__cxx11::basic_string<char>]
   SimpleActionClient(ros::NodeHandle & n, const std::string & name, bool spin_thread = true)
   ^~~~~~~~~~~~~~~~~~
/opt/ros/melodic/include/actionlib/client/simple_action_client.h:109:3: note:   candidate expects 3 arguments, 0 provided
/opt/ros/melodic/include/actionlib/client/simple_action_client.h:93:3: note: candidate: actionlib::SimpleActionClient<ActionSpec>::SimpleActionClient(const string&, bool) [with ActionSpec = dummy_sim2::JointsStateAction_<std::allocator<void> >; std::__cxx11::string = std::__cxx11::basic_string<char>]
   SimpleActionClient(const std::string & name, bool spin_thread = true)
   ^~~~~~~~~~~~~~~~~~
/opt/ros/melodic/include/actionlib/client/simple_action_client.h:93:3: note:   candidate expects 2 arguments, 0 provided
make[2]: *** [CMakeFiles/muj_hw_interface_node.dir/src/muj_hw_interface_node.cpp.o] Error 1
make[1]: *** [CMakeFiles/muj_hw_interface_node.dir/all] Error 2
make: *** [all] Error 2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...