C++ 'invalid conversion from ‘void*’ 到 ‘crypto_aes_ctx*’

标签 c++ c pointers

为了感受 vector 和并行化,我目前正在尝试使用 VC ( http://code.compeng.uni-frankfurt.de/projects/vc ) 并行化我的程序。我的程序是用C写的,但是VC需要用C++。所以我将文件重命名为 .cpp 并尝试编译它们。我得到三个编译错误,它们都是一样的

error: invalid conversion from ‘void*’ to ‘crypto_aes_ctx*’

代码如下

int crypto_aes_set_key(struct crypto_tfm *tfm, const uint8_t *in_key,
    unsigned int key_len)
{
    struct crypto_aes_ctx *ctx = crypto_tfm_ctx(tfm);
    uint32_t *flags = &tfm->crt_flags;
    int ret;
    ret = crypto_aes_expand_key(ctx, in_key, key_len);
    if (!ret)
        return 0;

    *flags |= CRYPTO_TFM_RES_BAD_KEY_LEN;
    return -EINVAL;
}

我怎样才能解决这个问题,让我的代码与 C++ 编译器一起工作?

最佳答案

C++ 中的类型比 C 更严格,因此您必须使用转换来告诉编译器 void 指针实际是什么。

struct crypto_aes_ctx *ctx = (struct crypto_aes_ctx*) crypto_tfm_ctx(tfm);

请注意,我使用的是 C 风格的强制转换,以防您想继续使用 C 中的代码。对于 C++,您可以使用 reinterpret_cast。 .

关于C++ 'invalid conversion from ‘void*’ 到 ‘crypto_aes_ctx*’,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26099428/

相关文章:

C++使用进程名称获取窗口标题

C++ 之后从运行 switch 到 if 语句

c - 如何使用 gcc (gtk3) 建立库的静态链接

java - C printf 未按预期从终端工作

c - c中的链接字符串列表

c - C中通过指向指针的指针从结构体中获取值

c++ - 使用 ostream 重载 << 运算符不起作用。为什么?

c++ - 无法将文件流作为函数参数传递?

c# - 如果 C# 指针被认为是 "unsafe,",这是否意味着 C++ 指针也是 "unsafe"?

c++ - 奇怪的指针行为 C++/继承