使用 g++ 版本 4.8.4 我收到错误:
错误:从“const SSL_METHOD* ()() {aka const ssl_method_st ()()}”到“MethodFuncPtr {aka ssl_method_st (*)”的转换无效)}' [-fpermissive]
我可以使用 -fpermissive 进行编译,但是修复方法是什么?我见过针对此类错误的解决方案,但没有针对返回类型为 const 的情况(即使它明确是 const 返回值)。
来自 ssl.h 的片段(C header ):
#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++ header :
#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;
最佳答案
我为 const SSL_METHOD* 返回类型添加了 typedef。编译器很高兴。
C++ header :
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;
关于c++ - 错误: invalid conversion on const return type,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32936849/