天天看点

error: call to non-static member function without an object argument

error: call to non-static member function without an object argument

1.在c++中,如果一个类中有个静态方法,那么这个静态方法中调用的也是静态方法

2.在c++中,一个类的普通函数,既可以调用非静态方法,也可以调用静态方法

例如:

DriverOfNet类中有个静态函数  netCallBackData

还有一个非静态函数 ConvertToHex

static void __stdcall netCallBackData(int cardId, char* pData, int length, void *user);

std::string ConvetToHex(char* data, int len);

如果想要在 netCallBackData函数中调用ConvetToHex函数,就会报错,所有要把ConvetToHex函数改成静态函数

class DriverOfNet: public INet, public IEbtNet
{

public:
    DriverOfNet();
    ~DriverOfNet();




    /**
     * @brief 向下位机下发控制指令
     * @param cardid  卡编号
     * @param pMsg  指令信息
     * @param iLen  指令长度
     * @return
     */

    int SendMsg(char* msg, int len);
    int Connect(const char* ip, int port);


    int RegisterRespondCallback(NetCmdCallback call, void* ptr);
    int RegisterDataCallback(NetDataCallback call, void* ptr );
    int RegisterStatusCallBack(StatusCallback call, void* ptr);

private:

    static void __stdcall netCallBackData(int cardId, char* pData, int length, void *user);
    static void __stdcall netStatusCallBack(NET_CONNENT_STATE status, void *userData);
    static void __stdcall callbackCmdRsp(char* pData, int length, void *user);
    static void __stdcall callbackApiStatus(int cardId, char*);
    static void __stdcall apiPrintlog(char*);
    static void __stdcall callbackNewDevIp(char* newDevIp);
    static void __stdcall updateFpgaCompleteCallback(int cardId, int status);

    static std::string ConvetToHex(char* data, int len);

private:

    int card_id;
    std::list<CARD_S> m_cardList;
    void* dataPtr ;
    NetDataCallback OnSendNetData;
    void* cmdPtr;
    NetCmdCallback OnSendCmdData;
    void* statusPtr;
    StatusCallback OnSendStatus;

    std::map<int, NetStatus> m_card_status;

    EBIT_DEVICE_S* dev;



};

#endif // DRIVEROFNET_H      

继续阅读