[ros-users] C++ compiling problem with ROS

ibwood ianbenjiman at hotmail.com
Mon May 31 18:08:33 UTC 2010


Hi all,

I am trying to compile some C++ code with ROS, examining a service and
client. Before attempting to run the service, I tried to 'make' the stack
with the two source codes in it. Here is the code and the output of the
command:

$ roscd beginner_tutorials
$ make
mkdir -p bin
cd build && cmake -Wdev -DCMAKE_TOOLCHAIN_FILE=`rospack find
rosbuild`/rostoolchain.cmake  ..
[rosbuild] Building package beginner_tutorials
[rosbuild] Including /home/ian/ros/ros/core/rospy/cmake/rospy.cmake
[rosbuild] Including /home/ian/ros/ros/core/roscpp/cmake/roscpp.cmake
-- Configuring done
-- Generating done
-- Build files have been written to:
/home/ian/ros/ros/ros_tutorials/beginner_tutorials/build
cd build && make 
make[1]: Entering directory
`/home/ian/ros/ros/ros_tutorials/beginner_tutorials/build'
make[2]: Entering directory
`/home/ian/ros/ros/ros_tutorials/beginner_tutorials/build'
make[3]: Entering directory
`/home/ian/ros/ros/ros_tutorials/beginner_tutorials/build'
make[3]: Leaving directory
`/home/ian/ros/ros/ros_tutorials/beginner_tutorials/build'
[  0%] Built target rospack_genmsg_libexe
make[3]: Entering directory
`/home/ian/ros/ros/ros_tutorials/beginner_tutorials/build'
make[3]: Leaving directory
`/home/ian/ros/ros/ros_tutorials/beginner_tutorials/build'
[  0%] Built target rosbuild_precompile
make[3]: Entering directory
`/home/ian/ros/ros/ros_tutorials/beginner_tutorials/build'
make[3]: Leaving directory
`/home/ian/ros/ros/ros_tutorials/beginner_tutorials/build'
make[3]: Entering directory
`/home/ian/ros/ros/ros_tutorials/beginner_tutorials/build'
[ 50%] Building CXX object
CMakeFiles/add_two_ints_client.dir/src/add_two_ints_client.o
/home/ian/ros/ros/ros_tutorials/beginner_tutorials/src/add_two_ints_client.cpp:
In function ‘int main(int, char**)’:
/home/ian/ros/ros/ros_tutorials/beginner_tutorials/src/add_two_ints_client.cpp:15:
error: no matching function for call to
‘beginner_tutorials::AddTwoInts::AddTwoInts(const char [13])’
/home/ian/ros/ros/ros_tutorials/beginner_tutorials/src/AddTwoInts.h:16:
note: candidates are: beginner_tutorials::AddTwoInts::AddTwoInts()
/home/ian/ros/ros/ros_tutorials/beginner_tutorials/src/AddTwoInts.h:16:
note:                 beginner_tutorials::AddTwoInts::AddTwoInts(const
beginner_tutorials::AddTwoInts&)
/home/ian/ros/ros/ros_tutorials/beginner_tutorials/src/add_two_ints_client.cpp:15:
error: parse error in template argument list
/home/ian/ros/ros/ros_tutorials/beginner_tutorials/src/add_two_ints_client.cpp:15:
error: conversion from ‘<unresolved overloaded function type>’ to non-scalar
type ‘ros::ServiceClient’ requested
make[3]: *** [CMakeFiles/add_two_ints_client.dir/src/add_two_ints_client.o]
Error 1
make[3]: Leaving directory
`/home/ian/ros/ros/ros_tutorials/beginner_tutorials/build'
make[2]: *** [CMakeFiles/add_two_ints_client.dir/all] Error 2
make[2]: Leaving directory
`/home/ian/ros/ros/ros_tutorials/beginner_tutorials/build'
make[1]: *** [all] Error 2
make[1]: Leaving directory
`/home/ian/ros/ros/ros_tutorials/beginner_tutorials/build'
make: *** [all] Error 2



my source files are in an "src" package located in the "beginner_tutorials"
package, and my header files are located in the same folder as the cpp
source files.. Here are the two programs:

------------------------------------
add_two_ints_server.cpp
------------------------------------
#include "ros.h"
#include "AddTwoInts.h"
 
bool add(beginner_tutorials::AddTwoInts::Request  &req,
       beginner_tutorials::AddTwoInts::Response &res )
{
res.sum = req.a + req.b;
ROS_INFO("request: x=%ld, y=%ld", (long int)req.a, (long int)req.b);
ROS_INFO("sending back response: [%ld]", (long int)res.sum);
return true;
}
 
int main(int argc, char **argv)
{
ros::init(argc, argv, "add_two_ints_server");
ros::NodeHandle n;

ros::ServiceServer service = n.advertiseService("add_two_ints", add);
ROS_INFO("Ready to add two ints.");
ros::spin();
 
return 0;
}


-------------------------------------
add_two_ints_client.cpp
-------------------------------------
#include "ros.h"
#include "AddTwoInts.h"
#include <cstdlib>
 
int main(int argc, char **argv)
{
  ros::init(argc, argv, "add_two_ints_client");
  if (argc != 3)
  {
     ROS_INFO("usage: add_two_ints_client X Y");
     return 1;
  }
   
  ros::NodeHandle n;
  ros::ServiceClient client =
n.serviceClient<beginner_tutorials::AddTwoInts("add_two_ints");
  beginner_tutorials::AddTwoInts srv;
  srv.request.a = atoll(argv[1]);
  srv.request.b = atoll(argv[2]);
  if (client.call(srv))
  {
     ROS_INFO("Sum: %ld", (long int)srv.response.sum);
  }
  else
  {
     ROS_ERROR("Failed to call service add_two_ints");
     return 1;
  }
 
return 0;
}


I added these two lines to CMakeLists.txt (located in the beginner_tutorials
package) as well:
rosbuild_add_executable(add_two_ints_server src/add_two_ints_server.cpp)
rosbuild_add_executable(add_two_ints_client src/add_two_ints_client.cpp)


I have been trying to figure out what is wrong with the compiler. So the
question is.. where did I go wrong? Thanks in advance for any help and/or
direction.

-Ian
-- 
View this message in context: http://ros-users.122217.n3.nabble.com/C-compiling-problem-with-ROS-tp859217p859217.html
Sent from the ROS-Users mailing list archive at Nabble.com.

------------------------------------------------------------------------------

_______________________________________________
ros-users mailing list
ros-users at lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ros-users


More information about the ros-users mailing list