0

首先...我在名为 core_ns.h 的文件中有以下代码

/*
 * the prototype for the function that will be called when a connection
 * is made to a listen connection.  
 * Arguments:
 *    Server_Connection - ID of the listen connection that received the request
 *    New_Connection    - ID of the data connection that was created.
 */
typedef void (* CORE_NS_Connect_Callback)
                (CORE_NS_Connection_Type  Server_Connection,
                 CORE_NS_Connection_Type  New_Connection);

然后我在名为 ParameterServerCSC.h 的文件中有以下内容

class ParameterServer{
public:
    //-------------------------------------------------------------------------------
    //FUNCTION: sendCallback
    //
    //PURPOSE: This method will be performed upon a connection with the client. The 
    //Display Parameter Server will be sent following a connection.
    //-------------------------------------------------------------------------------
    void sendCallback (CORE_NS_Connection_Type serverConnection, CORE_NS_Connection_Type newConnection);
}; // end class ParameterServer

最后...我在名为 ParameterServer.cpp 的文件中有以下用法

       //-------------------------------------------------------------------------------
      //FUNCTION: setup 
      //
      //PURPOSE: This method will perform any initialization that needs to be performed
      //at startup, such as initialization and registration of the server. 
      //-------------------------------------------------------------------------------
      void ParameterServer::setup(bool isCopilotMfd){

            CORE_NS_Connect_Callback newConnCallback; 
            newConnCallback = &ParameterServer::sendCallback;//point to local function to handle established connection.
      }

我收到以下警告:

警告:从void (ParameterServer::*)(CORE_NS_Connection_Type, CORE_NS_Connection_Type)' tovoid (*)(CORE_NS_Connection_Type, CORE_NS_Connection_Type)'
MY_PROJECT/DisplayParameterServer
ParameterServerCSC.cpp 转换

我正在使用 LynxOS178-2.2.2/GCC C++ 编译器。我的解决方案是用这个警告构建的。我试图理解警告的含义。对此的任何见解表示赞赏。

4

1 回答 1

4

ParameterServer::sendCallback是成员函数或方法(其类型为void (ParameterServer::*)(CORE_NS_Connection_Type, CORE_NS_Connection_Type)),因此不能用作函数(类型void (*)(CORE_NS_Connection_Type, CORE_NS_Connection_Type))。

您需要使其成为静态成员函数:

static void sendCallback (CORE_NS_Connection_Type serverConnection, CORE_NS_Connection_Type newConnection);

否则(取决于调用约定)API调用时sendCallback参数设置错误,会出现错误;至少隐藏this参数将是垃圾。

于 2012-08-23T17:16:08.260 回答