1. ホーム
  2. c++

[解決済み] 同じクラスのメンバーでありながら、「非静的なメンバー参照は特定のオブジェクトに対する相対参照でなければならない」というエラーが発生する。

2022-02-10 14:38:48

質問

この質問は何度もされていることだと思いますが、まだ行き詰まっています。このエラーが何であるかは理解しているつもりでしたが、明らかに理解していません。

つまり、私が受けているエラーは

a nonstatic member reference must be relative to a specific object

私のコードは

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 ***
    }
};

から pub と同じクラスに属しています。 getMessage() ということであれば、うまくいくはずではありませんか?どうすれば static メンバ関数は同じクラスの変数メンバを使用しますか?

P.S. これは ROS (Robotics Operating System)ですが、これはC++のミスだと思います(ROSとは関係ない)。

解決方法は?

C++では、静的メソッドから非静的クラスのメンバにアクセスすることはできません。通常のメソッドにして、以下のように試してみてください。

 void getMessage(const sensor_msgs::Image::ConstPtr& recMmsg){
        ROS_INFO( "I heard message" );
        pub.publish(recMmsg); //*** ERROR IS HERE ***
    }

そうでなければ、pub を静的メンバとして宣言します。

static ros::Publisher pub; 

以下の回答もご参照ください。

C++の静的メンバ関数と変数