簡體   English   中英

錯誤:從'void *'到'test :: apr_size_t * {aka long unsigned int *}'的無效轉換'[-fpermissive]

[英]error: invalid conversion from ‘void*’ to ‘test::apr_size_t* {aka long unsigned int*}’ [-fpermissive]

再次提出“在C ++中使用C”這類問題。 在我的C ++中使用APR的實驗中,我面臨一個新問題。 C ++頭文件:

#ifndef TEST_STRINGCOMMONS_H_
#define TEST_STRINGCOMMONS_H_

namespace test {
class StringCommons {
public:
    static char* substr_offset_length(apr_pool_t *pool, const char* input,
                                  apr_size_t offset, apr_size_t length);
};
} /* namespace test */
#endif /* TEST_STRINGCOMMONS_H_ */

以及它的C ++實現:

namespace test {
...
char* substr_offset_length(apr_pool_t *pool, const char* input, apr_size_t offset, apr_size_t length)
{
    apr_size_t *input_length = apr_pcalloc(pool, sizeof(apr_size_t));
...
}

} // namespace test

通過編譯此類,我得到了錯誤:

error: invalid conversion from ‘void*’ to ‘test::apr_size_t* {aka long unsigned int*}’ [-fpermissive]

我想知道這段代碼有什么問題。 請有人幫我。

最好的問候,SK

apr_pcalloc返回一個void *,您可能需要將其static_cast到所需的類型(在這種情況下為apt_size_t *)。

在C ++中,任何指針都可以隱式轉換為void* (就像在C中一樣)。 但是與C不同,在C ++中,不能將void*類型的指針隱式轉換為int*void**std::string*或其他任何形式。

解決方案是reinterpret_cast

apr_size_t *input_length = reinterpret_cast<apr_size_t *>(apr_pcalloc(pool, sizeof(apr_size_t)));

盡管為什么有人要在堆上分配一個寂寞的long超出了我的范圍。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM