error: invalid use of non-static member function
error: invalid use of non-static member function
问题:
我试图在另一个class(比如class B)中实例化一个class(比如class A),然后调用[的所有成员函数=55=] A里面的class B为实例化对象。我在 class B 中每次调用 class A 方法时都会收到以下错误消息:
error: invalid use of non-static member function
我知道以下关于同一问题的讨论帖。 。但我没有找到与我的问题相关的解决方案。我在下面详细说明这个问题。你能告诉我哪里出了问题吗?
代码:
以下是我的 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() {
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);
}
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);
}
错误:
我在 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
从修复构造函数开始:
Turtlebot() {
nomad = Navigation() ;
}
问题:
我试图在另一个class(比如class B)中实例化一个class(比如class A),然后调用[的所有成员函数=55=] A里面的class B为实例化对象。我在 class B 中每次调用 class A 方法时都会收到以下错误消息:
error: invalid use of non-static member function
我知道以下关于同一问题的讨论帖。
代码:
以下是我的 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() {
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);
}
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);
}
错误:
我在 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
从修复构造函数开始:
Turtlebot() {
nomad = Navigation() ;
}