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 / GCCC++コンパイラを使用しています。私のソリューションはこの警告で構築されます。警告の意味を理解しようとしています。これに対する洞察はありがたいです。

4

1 に答える 1

4

ParameterServer::sendCallbackはメンバー関数またはメソッド(その型はvoid (ParameterServer::*)(CORE_NS_Connection_Type, CORE_NS_Connection_Type))であるため、関数(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 に答える