2015-10-04 67 views
1

使用G ++版本4.8.4,我得到一個錯誤無效的轉換,從「常量SSL_METHOD *()無效的轉換(){又名常量ssl_method_st)() }'to'MethodFuncPtr {aka ssl_method_st(*)()}'[-fpermissive]錯誤:</p> <p>錯誤:在const的返回類型

我可以使用-fpermissive進行編譯,但是什麼是修復?我已經看到了這種類型的錯誤的解決方案,但是當返回類型是const時(儘管它顯式地是一個常量返回值)沒有。

從ssl.h一個片段(C報頭):

#ifdef __cplusplus 
extern "C" { 
#endif 

    typedef struct ssl_method_st { 
    int version; 
    int (*ssl_new) (int *s); 
    void (*ssl_clear) (int *s); 
    } SSL_METHOD; 

    const SSL_METHOD *TLSv1_method(void); 

#ifdef __cplusplus 
} 
#endif 

C++頭:

#include <ssl.h> 

extern "C" { 
    typedef SSL_METHOD*(*MethodFuncPtr)(void); 
} 

class Method 
{ 
public: 
    Method(SSL_METHOD *method); 

    static const MethodFuncPtr TLSv1; 

private: 
    SSL_METHOD *m_method; 
}; 

C++源:

Method::Method(SSL_METHOD* method) 
    : m_method(method) 
{ } 

const MethodFuncPtr Method::TLSv1 = TLSv1_method; 
+0

不應此'方法(SSL_METHOD *方法);'是'方法(SSL_METHOD方法);'?看起來你有一個函數指針的指針,我懷疑你不想要。 –

+0

您有一個返回'const SSL_METHOD *'的函數,以及一個期望函數返回非const'SSL_METHOD *'的變量。兩者不兼容。修復其中一個以匹配另一個。 –

+0

不是真正的C問題。 – chqrlie

回答

0

我添加一個typedef爲一個const SSL_METHOD *返回類型。編譯器很高興。

C++頭:

extern "C" { 
    typedef SSL_METHOD*(*MethodFuncPtr)(void); 
    typedef const SSL_METHOD*(*ConstMethodFuncPtr)(void); 
} 

class Method 
{ 
public: 
    Method(SSL_METHOD *method); 

    static ConstMethodFuncPtr TLSv1; 

private: 
    SSL_METHOD *m_method; 
}; 

C++源:

Method::Method(SSL_METHOD* method) 
    : m_method(method) 
{ } 

ConstMethodFuncPtr Method::TLSv1 = TLSv1_method; 
相關問題