error: field 'ctx' has incomplete type EVP_CIPHER_CTX

我怕爱的太早我们不能终老 提交于 2020-04-05 20:31:03

没有实体,建议用对应的函数进行创建,不暴露内部结构。

EVP_CIPHER_CTX *ctx = EVP_CIPHER_CTX_new();
EVP_CIPHER_CTX_init(ctx);
//do sth here
//...
EVP_CIPHER_CTX_free(ctx);

举个例子

/* a.cpp */
#include"a.h"
#include<stdio.h>
struct Test
{
    int a;
    int b;
};
Test * create()
{
    return new Test{1,2};
}
void print(Test *a)
{
    printf("a = %d; b = %d\n",a->a,a->b);
}
/*a.h*/
struct Test;
Test * create();
void print(Test *);
/*b.cpp*/
#include"a.h"
int main()
{
    Test *t;
    t = create();
    print(t);
}
  • 先将b.cpp编译成一个.o库.静态库。
  • 这个时候就等价于openssl里面的lib
  • 然后只留.h头文件,这就隐藏了实现细节。单个编译的时候就不需要知道实体在哪儿,开发者也没有必要知道在哪儿。
  • 最后编译b.cpp的时候将对应库添加进来就可以了。
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!