Использования г ++ версии 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;
Если это не 'Метод (SSL_METHOD * метод);' 'быть метод (метод SSL_METHOD)'? Похоже, у вас есть указатель на указатель на функцию, который, как я подозреваю, вам не нужен. –
У вас есть функция, которая возвращает 'const SSL_METHOD *', и переменную, которая ожидает, что функция возвращает неконстантный 'SSL_METHOD *'. Эти два несовместимы. Исправьте один из них, чтобы соответствовать другому. –
Не совсем вопрос C. – chqrlie