function-definition error when passing struct into function

asked 2020-12-01 16:15:17 -0500

98JMC gravatar image

Version - ROS melodic System - Ubuntu bionic 18.04

Hi, this may be more of a C++ error than a ROS error but it occurs when I'm running ros_make. The error began when I tried to alter a function to take a struct as one of its inputs - it is listed below:

    /home/catkin_ws/src/enki_ros_pck/ReversalSignals.cpp: In function ‘void setPelletColour(Pellet)’:
/home/catkin_ws/src/enki_ros_pck/ReversalSignals.cpp:38:87: error: a function-definition is not allowed here before ‘{’ token
 void seenBool(enki_ros_pck::Sight& seen, sensor_msgs::Image msg, struct Pellet){
                                                                                       ^
/home/catkin_ws/src/enki_ros_pck/ReversalSignals.cpp:102:1: error: a function-definition is not allowed here before ‘{’ token
 {
 ^
/home/catkin_ws/src/enki_ros_pck/ReversalSignals.cpp:116:1: error: a function-definition is not allowed here before ‘{’ token
 {
 ^
/home/catkin_ws/src/enki_ros_pck/ReversalSignals.cpp:125:1: error: a function-definition is not allowed here before ‘{’ token
 {
 ^
/home/catkin_ws/src/enki_ros_pck/ReversalSignals.cpp:187:1: error: a function-definition is not allowed here before ‘{’ token
 {
 ^
/home/catkin_ws/src/enki_ros_pck/ReversalSignals.cpp:196:1: error: expected ‘}’ at end of input
 }
 ^
enki_ros_pck/CMakeFiles/robot.dir/build.make:134: recipe for target 'enki_ros_pck/CMakeFiles/robot.dir/ReversalSignals.cpp.o' failed
make[2]: *** [enki_ros_pck/CMakeFiles/robot.dir/ReversalSignals.cpp.o] Error 1

Below is the contents of Reversal.h followed by Reversal.cpp where the struct and function are defined - I suspect its something to do with the way I have defined it thats causing the issues.

    **ReversalSignals.h**
#ifndef __REVERSAL_SIGNALS_H
#define __REVERSAL_SIGNALS_H

#include "ros/ros.h" 
#include "std_msgs/Bool.h"
#include <ros/package.h>
#include "enki_ros_pck/Sight.h"
#include "sensor_msgs/Image.h"

#include <Enki.h>
#include <fstream>
#include <unistd.h>
#include <stdio.h>
#include <math.h>
#include <sstream>
#include <iomanip>
#include "Racer.h"
#include "Geometry.h"

#include "bandpass.h"
#include "parameters.h"
#include <chrono>
#include "PhysicalEngine.h"

enum Colours {BLANK, RED, GREEN, BLUE, PURPLE};

struct Pellet
{
Enki::PhysicalObject* name;
int colour;
double x_coord;
double y_coord;
};

Pellet Pellet;

void setPelletColour(struct Pellet);

void seenBool(enki_ros_pck::Sight& seen, sensor_msgs::Image msg, struct Pellet);

void rewardBool(Enki::Racer* racer, struct Pellet, Enki::PhysicalObject* pellet, std_msgs::Bool& reward, double maxx, double maxy);

void getDistance(Enki::Racer* racer, struct Pellet, Enki::PhysicalObject* pellet, enki_ros_pck::Sight& sight);

void placeBool(std_msgs::Bool& placeBool, Enki::Racer* racer, double circleCentreX, double circleCentreY, double circleRad ,double maxX, double maxY);

#endif

ReversalSignals.cpp

  #include "ReversalSignals.h"

    using namespace Enki;
    using namespace std;
    using namespace std::chrono;

    void setPelletColour(struct Pellet){
        int pellet_colour = Pellet.colour;
        switch (pellet_colour){
        case RED:
            Pellet.name->setColor(Enki::Color(1,0,0));
            pellet_colour = RED;
            break;
        case GREEN:
            Pellet.name->setColor(Enki::Color(0,1,0));
            pellet_colour = GREEN;
            break;
        case BLUE:
            Pellet.name->setColor(Enki::Color(0,0,1));
            pellet_colour = BLUE;
            break;
        case PURPLE:
            Pellet.name->setColor(Enki::Color(1,0,1));
            pellet_colour = PURPLE;
            break;
        default:
            Pellet.name->setColor(Enki::Color(0,0,0));
            pellet_colour = BLANK;
            std::cout << "ERROR setPelletColour: please set pellet colout to RED, GREEN, BLUE, or PURPLE." << std::endl;
            break;

    }

    void seenBool(enki_ros_pck::Sight& seen, sensor_msgs::Image msg, struct Pellet){
        static int vision[9];

        int pellet_colour = Pellet.colour ...
(more)
edit retag flag offensive close merge delete

Comments

This will be a QA about C++, so if this comment doesn't seem to solve your problem, I suggest you to use another QA site.

The } is missing. The } in front of void seenBool is for switch (pellet_colour){, not the last { in setPelletColour.

miura gravatar image miura  ( 2020-12-02 09:31:11 -0500 )edit