ошибка: недопустимое преобразование из void * в test :: apr_size_t * aka long unsigned int *} ’[-fpermissive]

Вернемся к вопросу «Использование C в C ++». В моем эксперименте по использованию APR в C ++ я столкнулся с новой проблемой. Заголовочный файл 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

0

Решение

apr_pcalloc возвращает void *, который может потребоваться для static_cast желаемого типа (в данном случае apt_size_t *).

1

Другие решения

В 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 в кучу за мной.

0

По вопросам рекламы [email protected]