Er moet fouten ontvangen “Een non-statischere ledenreferentie moet ten opzichte van een specifiek object zijn” terwijl beide lid in dezelfde klasse

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 pubmaakt deel uit van dezelfde klasse als getMessage(), Moet het niet werken? Hoe kan ik een staticLedenfunctie 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 getMessageniet-statisch maken of je moet pubstatisch maken.

Waarschijnlijk moet u uw ontwerp heroverwegen. Waarom probeer je getMessagestatisch te maken? Als een zeer algemene vuistregel is statische elektriciteit een vergissing, vooral voor een nieuweling.

Other episodes