c++ - 错误: invalid conversion on const return type

标签 c++ c c++11 g++

使用 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/

相关文章:

找不到存储到 'delta' 的值未被读取的原因

c++ - 未调用类型转换运算符

c++ - 安全登录逻辑

c++ - 清除 gtest 中的 HasFailure 标志

c++ - OpenGL - 某些图形卡上的问题

c++ - 构造函数c++中的奇怪函数调用

c - 在 fscanf 中匹配两个以 = 作为分隔符的字符串

c - NULL是如何终止的?

c++ - 格式化 C++ setw

c++ - 使用 ref 限定符实现方法