![](/img/trans.png)
[英]g++ compiler: error invalid conversion from 'pthread_t {aka long unsigned int}' to 'void* (*)(void*)' [-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.