2015-10-04 4 views
1

Использования г ++ версии 4.8.4 я получаю сообщение об ошибке:ошибка: неправильное преобразование на сопзЬ типа возвращаемого

ошибки: недопустимое преобразование из «сопзЬ SSL_METHOD * ()() {ака Const ssl_method_st ()() } 'to' MethodFuncPtr {aka ssl_method_st (*)()} '[-fpermissive]

Я могу скомпилировать с -fpermissive, но что такое исправление? Я видел решения для этого типа ошибок, но ни один из них, когда тип возврата является константой (хотя это явно значение возврата константы).

Фрагмент из ssl.h (С заголовком):

#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 *', и переменную, которая ожидает, что функция возвращает неконстантный 'SSL_METHOD *'. Эти два несовместимы. Исправьте один из них, чтобы соответствовать другому. –

+0

Не совсем вопрос C. – chqrlie

ответ

0

Я добавил ЬурейиЙ для константного SSL_METHOD * возврат type. Компилятор счастлив.

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; 
Смежные вопросы