2014-09-29 90 views
0

爲了獲得向量和並行化的感覺我目前正嘗試使用VC(http://code.compeng.uni-frankfurt.de/projects/vc)並行化我的程序。我的程序是用C編寫的,但VC需要使用C++。所以我將我的文件重命名爲.cpp並試圖編譯它們。我得到三個編譯我怎麼能解決這個問題得到了C++編譯器的工作我的代碼都是一樣的C++從'void *'無效轉換爲'crypto_aes_ctx *'

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; 
} 

錯誤?

回答

3

在C++中鍵入比C更嚴格,所以你必須使用cast來告訴編譯器void指針實際是什麼。

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

請注意,我使用的是C風格的演員,如果你想繼續與C的代碼對於C++,你會以其它方式使用reinterpret_cast

2

在C++中,您可能不會將類型爲void *的指針指定給其他類型的任何其他指針,而無需進行明確的重新解析轉換。

如果語句時發生錯誤

struct crypto_aes_ctx *ctx = crypto_tfm_ctx(tfm); 

,那麼你必須寫

struct crypto_aes_ctx *ctx = reinterpret_cast<struct crypto_aes_ctx *>(crypto_tfm_ctx(tfm)); 
相關問題