I am trying to subscribe to `diagnostic` topic and based on the `level` published by the topic, I am trying to start and stop my operation. I have created 2 functions `requestStart` and `requestNotStart` for these purposes. I am getting the `CMake` errors which I am unable to fix (posted at the end of the post).
Following is my code -
using namespace std;
namespace errorLib
{
class errorH
{
public:
errorH(EC value, string text, int sec):
value_(value),
text_(text),
is_started_(false),
sec_(sec)
{
}
EC value_;
string text_;
bool is_started_;
int retry_seconds_;
};
}
void diagnosticCallback(const diagnostic_msgs::DiagnosticArrayPtr &diags_msg)
{
if (diags_msg[0].level == diagnostic_msgs::DiagnosticStatus::ERROR)
errorcode = NodeToErrorCode[diags_msg[0].name];
requestStart();
else (diags_msg[0].level == diagnostic_msgs::DiagnosticStatus::OK)
errorcode = NodeToErrorCode[diags_msg[0].name];
requestNotStart();
}
int requestStart(errorLib::errorH& c)
{
if(!c.is_started_)
retry_seconds_ = 2;
// Start timer
// Timer expired
c.is_started_ = true;
return 0;
}
int requestNotStart(errorLib::errorH& c)
{
return 0;
}
int main(int argc, char **argv)
{
errorLib::errorH c("For starting/ending", 2);
requestStart(c);
requestNotStart(c);
ros::init(argc, argv, "");
ros::NodeHandle nh;
std::map NodeToErrorCode =
{{"rosout", 1},
{"", 2},
{"", 3}};
ros::Subscriber sub = nh.subscribe("diagnostics", 1000, diagnosticCallback);
ros::spin();
return 0;
}
Following are the errors for reference -
In function ‘void diagnosticCallback(const DiagnosticArrayPtr&)’:
/home/default_ws/src/err_pack/src/errors_node.cpp:52:21: error: invalid use of ‘boost::detail::sp_array_access>>::type {aka void}’
if (diags_msg[0].level == diagnostic_msgs::DiagnosticStatus::ERROR)
^
/home/default_ws/src/err_pack/src/errors_node.cpp:54:7: error: ‘errorcode’ was not declared in this scope
errorcode = NodeToErrorCode[diags_msg[0].name];
^
/home/default_ws/src/err_pack/src/errors_node.cpp:54:19: error: ‘NodeToErrorCode’ was not declared in this scope
errorcode = NodeToErrorCode[diags_msg[0].name];
^
/home/default_ws/src/err_pack/src/errors_node.cpp:54:47: error: invalid use of ‘boost::detail::sp_array_access>>::type {aka void}’
errorcode = NodeToErrorCode[diags_msg[0].name];
^
/home/default_ws/src/err_pack/src/errors_node.cpp:55:18: error: ‘requestStart’ was not declared in this scope
requestStart();
^
/home/default_ws/src/err_pack/src/errors_node.cpp:58:26: error: invalid use of ‘boost::detail::sp_array_access>>::type {aka void}’
else if (diags_msg[0].level == diagnostic_msgs::DiagnosticStatus::OK)
^
/home/default_ws/src/err_pack/src/errors_node.cpp:59:47: error: invalid use of ‘boost::detail::sp_array_access>>::type {aka void}’
errorcode = NodeToErrorCode[diags_msg[0].name];
^
/home/default_ws/src/err_pack/src/errors_node.cpp:60:21: error: ‘requestNotStart’ was not declared in this scope
requestNotStart();
^
/home/default_ws/src/err_pack/src/errors_node.cpp: In function ‘int requestStart(errorLib::errorH&)’:
/home/default_ws/src/err_pack/src/errors_node.cpp: In function ‘int main(int, char**)’:
/home/default_ws/src/err_pack/src/errors_node.cpp:93:53: error: no matching function for call to ‘errorLib::errorH::errorH(const char [21], int)’
errorLib::errorH c("For starting/ending", 2);
^
/home/default_ws/src/err_pack/src/errors_node.cpp:93:53: note: candidates are:
/home/default_ws/src/err_pack/src/errors_node.cpp:21:7: note: errorLib::errorH::errorH(EC, std::string, int)
errorH(EC value, string text, int sec):
^
/home/default_ws/src/err_pack/src/errors_node.cpp:21:7: note: candidate expects 3 arguments, 2 provided
/home/default_ws/src/err_pack/src/errors_node.cpp:18:9: note: errorLib::errorH::errorH(const errorLib::errorH&)
class errorH
^
/home/default_ws/src/err_pack/src/errors_node.cpp:18:9: note: candidate expects 1 argument, 2 provided
/home/default_ws/src/err_pack/src/errors_node.cpp:18:9: note: errorLib::errorH::errorH(errorLib::errorH&&)
/home/default_ws/src/err_pack/src/errors_node.cpp:18:9: note: candidate expects 1 argument, 2 provided
I apologize for the long post. I couldn't figure out a better way to present my problem.
↧