我正在第一次尝试使用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编译代码
答案 0 :(得分: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*[]
}
答案 1 :(得分:1)
这里的问题是你需要一个指向常量数据的指针,而不是一个指向数据的常量指针。使用中间变量来存储有问题的参数的值,我认为你将能够对问题进行排序。
答案 2 :(得分:1)
首先,请注意参数声明的含义略有不同
当它们作为函数参数出现时。在这种情况下,实际类型
第三个参数是:Arg const* const*
。我认为你不能
在这里使用new expression
(如果可以,可以删除它);新的
表达式需要new (Arg const* const
[n])
;它分配一个n
未初始化的const指针数组。
你需要的是更多的东西:
std::vector<Arg const*> args;
// Fill out args with the desired data...
... , &args[0], ...
答案 3 :(得分:0)
功能签名是:
static bool FindAndConsumeN(StringPiece* input, const RE2& pattern,
const Arg* const args[], int argc);
第三个参数是const Arg * const args [],这意味着: 常量的const指针数组,用于键入Arg。
即。数组是常量,每个条目也是const。