1

私は C++、特に Google RE2 ライブラリに初めて足を踏み入れましたが、いくつかの構文に行き詰まっています。シグネチャを使用して関数を呼び出そうとしています:

static bool FindAndConsumeN(StringPiece* input, const RE2& pattern,
                         const Arg* const args[], int argc);

コードで:

const re2::RE2::Arg match;
bool isMatched = RE2::FindAndConsumeN(&inputPiece, *expression,new const re2::RE2::Arg[] { &match },0)

ただし、コンパイラ エラーが発生します。

Error   3   error C2664: 're2::RE2::FindAndConsumeN' : cannot convert parameter 3 from 'const re2::RE2::Arg (*)[]' to 'const re2::RE2::Arg *const []'

明らかに 3 番目の引数のデータ型が間違っていますが、正しいデータ型を知っている人はいますか?

Visual Studio 2010 でコードをコンパイルしています

4

4 に答える 4

2

次のようなコードを使用する必要があります。

re2::RE2::Arg match;
re2::RE2::Arg* args[] = { &match };
re2::RE2::FindAndConsumeN(NULL, pattern, args, 1);

argsに変換されconst Arg* args[]ます。

内部constは呼び出しコードとは関係なく、 内でのみ機能しますFindAndConsumeN

後で配列newできないため、使用しないでください。 (それであるだろう)delete
newnew const re2::RE2::Arg*[]

于 2011-12-22T15:16:19.607 に答える
1

ここでの問題は、データへの定数ポインターではなく、定数データへのポインターが必要なことです。問題のある引数の値を格納するために中間変数を使用すると、問題を分類できると思います。

于 2011-12-22T14:49:36.503 に答える
1

まず、パラメーター宣言が関数パラメーターとして表示される場合、意味が少し異なることに注意してください。この場合、3 番目のパラメーターの実際の型は次のとおりArg const* const*です。ここでa を使用できるとは思いませんnew expression(できれば、誰がそれを削除するでしょうか)。必要な新しい式は次のようになりnew (Arg const* const [n])ます。n初期化されていない const ポインターの配列を割り当てます。必要なのは、次のようなものです。

std::vector<Arg const*> args;
//  Fill out args with the desired data...
... , &args[0], ...
于 2011-12-22T15:09:19.433 に答える
0

関数のシグネチャは次のとおりです。

static bool FindAndConsumeN(StringPiece* input, const RE2& pattern,
                            const Arg* const args[], int argc);

3 番目の引数は const Arg* const args[] です。これは、Arg 型への const ポインターの定数配列を意味します。

つまり、配列は定数であり、各エントリも定数です。

于 2011-12-22T15:15:28.340 に答える