0

「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

4

2 に答える 2

1

apr_pcalloc は void* を返します。必要な型 (この場合は apt_size_t*) に static_cast する必要がある場合があります。

于 2014-03-30T12:46:31.753 に答える
0

C++ では、(C と同様に) 任意のポインターを暗黙的に変換できますvoid*。ただし、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ヒープに孤独を割り当てたいと思う理由は私にはわかりません。

于 2014-03-30T12:48:12.797 に答える