error: invalid use of non-static member function c++ 11 : Issue:
------

I am trying to instantiate a class (say class A) inside another class (say class B) and then call all the member functions of class A inside the class B for the instantiated object. I get the following error message for every call of class A methods inside class B : 
***error: invalid use of non-static member function***

I am aware of the following thread about the same problem. https://stackoverflow.com/questions/41326376/invalid-use-of-non-static-member-function-c. But I don't find that solution relevant to my problem. I am elaborating the problem below. Can you please enlighten me what is going wrong ?

Code:
-----

The following are my classes:

**Navigation.h**

    class Navigation {
    public:
        Navigation() {
        laserData = n.subscribe("/scan", 200, &Navigation::laserCallback, this);
        velPub = n.advertise<geometry_msgs::Twist> ("/mobile_base/commands/velocity", 100, this);
    }
        ~Navigation() {}
        geometry_msgs::Twist moveCommand();
        geometry_msgs::Twist turnCommand();
        geometry_msgs::Twist stopCommand();
        void laserCallback(const sensor_msgs::LaserScan::ConstPtr& data);
        float getObstacleRange();
        void broadcastVelocity(geometry_msgs::Twist velocity);

    private:
        ros::NodeHandle n;
        ros::Publisher velPub;
        ros::Subscriber laserData;
        float obstacleRange;
        ros::Timer normalTurnTimer;
        ros::Timer driveTimer;
        ros::Timer periodicTurnTimer;
        geometry_msgs::Twist drivePower;
    };

**Navigation.cpp**

    geometry_msgs::Twist Navigation::moveCommand() {
        drivePower.linear.x = 0.25;
        drivePower.linear.y = 0.0;
        drivePower.linear.z = 0.0;
        drivePower.angular.x = 0.0;
        drivePower.angular.y = 0.0;
        drivePower.angular.z = 0.0;
        return drivePower;
    }

    geometry_msgs::Twist Navigation::turnCommand() {
        std::random_device scramble;
        std::mt19937 num(scramble());
        std::uniform_int_distribution<int> dist(30, 100);
        float angle = dist(num);
        drivePower.linear.x = 0.0;
        drivePower.linear.y = 0.0;
        drivePower.linear.z = 0.0;
        drivePower.angular.x = 0.0;
        drivePower.angular.y = 0.0;
        drivePower.angular.z = angle * (3.14 / 180);
        return drivePower;
    }

    geometry_msgs::Twist Navigation::stopCommand() {
        drivePower.linear.x = 0.0;
        drivePower.linear.y = 0.0;
        drivePower.linear.z = 0.0;
        drivePower.angular.x = 0.0;
        drivePower.angular.y = 0.0;
        drivePower.angular.z = 0.0;
        return drivePower;
    }

    void Navigation::laserCallback(const sensor_msgs::LaserScan::ConstPtr& data) {
        float threshold = 10;
        for (const auto& dist : data->ranges) {
            if (threshold > dist) threshold = dist;
        }
        obstacleRange = threshold;
        ROS_DEBUG_STREAM("Approach distance to obstacle is : " << obstacleRange);
    }

    float Navigation::getObstacleRange() {
        return obstacleRange;
    }

    void Navigation::broadcastVelocity(geometry_msgs::Twist velocity) {
        velPub.publish(velocity);
    }

**Turtlebot.h**

    class Turtlebot {
    public:
        Turtlebot() {
            Navigation nomad;
        }
        ~Turtlebot() {}
        void drive();

    private:
        Navigation nomad;
    };

**Turtlebot.cpp**

    void Turtlebot::drive() {
        if (nomad.getObstacleRange() < 0.7) {
            nomad.broadcastVelocity(nomad.stopCommand);
            int i;
            while (i < 5) {
                nomad.broadcastVelocity(nomad.turnCommand);
                i++;
            }
        } else nomad.broadcastVelocity(nomad.moveCommand);
    }


Errors:
-------


I get the following errors during ***cmake .. && make***

    /home/arun/Documents/catkin_ws/src/TinyNomad/src/Turtlebot.cpp: In member function ‘void Turtlebot::drive()’:
    /home/arun/Documents/catkin_ws/src/TinyNomad/src/Turtlebot.cpp:37:50: error: invalid use of non-static member function
         nomad.broadcastVelocity(nomad.stopCommand);
                                                  ^
    /home/arun/Documents/catkin_ws/src/TinyNomad/src/Turtlebot.cpp:40:54: error: invalid use of non-static member function
             nomad.broadcastVelocity(nomad.turnCommand);
                                                      ^
    /home/arun/Documents/catkin_ws/src/TinyNomad/src/Turtlebot.cpp:43:53: error: invalid use of non-static member function
     } else nomad.broadcastVelocity(nomad.moveCommand);
                                                     ^
    TinyNomad/CMakeFiles/tinynomad.dir/build.make:110: recipe for target 'TinyNomad/CMakeFiles/tinynomad.dir/src/Turtlebot.cpp.o' failed
    make[2]: *** [TinyNomad/CMakeFiles/tinynomad.dir/src/Turtlebot.cpp.o] Error 1
    CMakeFiles/Makefile2:1191: recipe for target 'TinyNomad/CMakeFiles/tinynomad.dir/all' failed
    make[1]: *** [TinyNomad/CMakeFiles/tinynomad.dir/all] Error 2
    Makefile:138: recipe for target 'all' failed
    make: *** [all] Error 2
    Invoking "make -j12 -l12" failed
