C++11 错误:非静态成员函数的使用无效 问题:

C++11 错误:非静态成员函数的使用无效 问题:,c++11,cmake,compiler-errors,member-functions,non-static,C++11,Cmake,Compiler Errors,Member Functions,Non Static,我试图在另一个类(比如B类)中实例化一个类(比如a类),然后为实例化的对象调用B类中a类的所有成员函数。对于类B中的类A方法的每次调用,我都会收到以下错误消息: 错误:非静态成员函数的使用无效 我知道关于同一问题的以下线索。但我觉得这个解决方案与我的问题无关。我在下面详细阐述这个问题。你能告诉我出了什么问题吗 代码: 以下是我的课程: 导航.h class Navigation { public: Navigation() { laserData = n.subscribe("/

我试图在另一个类(比如B类)中实例化一个类(比如a类),然后为实例化的对象调用B类中a类的所有成员函数。对于类B中的类A方法的每次调用,我都会收到以下错误消息:

错误:非静态成员函数的使用无效

我知道关于同一问题的以下线索。但我觉得这个解决方案与我的问题无关。我在下面详细阐述这个问题。你能告诉我出了什么问题吗

代码: 以下是我的课程:

导航.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;
};
class Turtlebot {
public:
    Turtlebot() {
        Navigation nomad;
    }
    ~Turtlebot() {}
    void drive();

private:
    Navigation nomad;
};
Turtlebot.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;
};
class Turtlebot {
public:
    Turtlebot() {
        Navigation nomad;
    }
    ~Turtlebot() {}
    void drive();

private:
    Navigation nomad;
};
Turtlebot.cpp

geometry_msgs::Twist Navigation::moveCommand() {
    return drivePower;
}

geometry_msgs::Twist Navigation::turnCommand() {
    return drivePower;
}

geometry_msgs::Twist Navigation::stopCommand() {
    return drivePower;
}

void Navigation::laserCallback(const sensor_msgs::LaserScan::ConstPtr& data) {
    obstacleRange = 0.8;

}

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

void Navigation::broadcastVelocity(geometry_msgs::Twist velocity) {
    velPub.publish(velocity);
}
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);
}

从修复构造函数开始:

Turtlebot() {
        nomad = Navigation() ;
    }

请您删除尽可能多的代码以尽量减少问题?好的。我删除了一些不必要的代码部分。方法
broadcastVelocity
接受(非函数)类型的参数
geometry\u msgs::Twist
。您正试图使用
nomad.stopCommand
调用此方法,该函数返回所需类型的值。编译器恰恰抱怨这种不兼容。可能需要调用该函数:
nomad.stopCommand()
。谢谢。这个解决方案有效。这正是问题所在。我尝试了这个解决方案。但是我仍然得到相同的错误。t这n个答案是什么??