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 []'

我显然把第三个参数的数据类型弄错了,但是有人知道正确的数据类型是什么吗?

我正在使用 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排列。
new它会是new const re2::RE2::Arg*[]

于 2011-12-22T15:16:19.607 回答
1

这里的问题是你需要一个指向常量数据的指针,而不是一个指向数据的常量指针。使用中间变量来存储有问题的参数的值,我认为您将能够对问题进行排序。

于 2011-12-22T14:49:36.503 回答
1

首先,请注意,当参数声明作为函数参数出现时,它们的含义略有不同。在这种情况下,第三个参数的实际类型是:Arg const* const*。我认为您不能在new expression此处使用 a (如果可以,谁会删除它);所需的新表达式类似于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);

第三个参数是 const Arg* const args[],​​这意味着:指向 Arg 类型的 const 指针的常量数组。

即数组是常量,每个条目也是常量。

于 2011-12-22T15:15:28.340 回答