Ik weet dat deze vraag vele malen is gesteld, maar ik zit nog steeds vast. Ik dacht dat ik kreeg waar deze fout over ging over wat ik natuurlijk niet.
Dus, de fout die ik krijg is
a nonstatic member reference must be relative to a specific object
Mijn code is:
class theTranslator {
public:
ros::NodeHandle nh;
ros::Publisher pub = nh.advertise<sensor_msgs::Image>("camera/depth/image_raw", 100);
static void getMessage(const sensor_msgs::Image::ConstPtr& recMmsg) {
ROS_INFO( "I heard message" );
pub.publish(recMmsg); //*** ERROR IS HERE ***
}
};
Sinds pub
maakt deel uit van dezelfde klasse als getMessage()
, Moet het niet werken? Hoe kan ik een static
Ledenfunctie Gebruik een variabel lid van dezelfde klasse?
P.S. Dit gebeurt in ROS (Robotics-besturingssysteem), maar ik geloof dat dit een C++ -fout is (niet gerelateerd aan ROS).
Antwoord 1, Autoriteit 100%
In C++ kunt u geen toegang krijgen tot een niet-statische klasse-lid van een statische methode. Maak er een normale methode en probeer hieronder: –
void getMessage(const sensor_msgs::Image::ConstPtr& recMmsg){
ROS_INFO( "I heard message" );
pub.publish(recMmsg); //*** ERROR IS HERE ***
}
anders declareer de pub als statisch lid
static ros::Publisher pub;
Raadpleeg ook het onderstaande antwoord
C++ statische lidfuncties en variabelen
Antwoord 2, autoriteit 33%
Je moet getMessage
niet-statisch maken of je moet pub
statisch maken.
Waarschijnlijk moet u uw ontwerp heroverwegen. Waarom probeer je getMessage
statisch te maken? Als een zeer algemene vuistregel is statische elektriciteit een vergissing, vooral voor een nieuweling.