所以我有一个看起来像这样的程序:
const char *Argv[] = {"stuff", "stuff1", "stuff3"};
bool pass = xxxxx::yyyyy(Argv.begin(), Argv.end(), Tri);
我认为这是非法的,因为const char *
它不是用户定义的类型。但是,我不确定如何解决这个问题。我需要更改第一行还是第二行?或两者?
所以我有一个看起来像这样的程序:
const char *Argv[] = {"stuff", "stuff1", "stuff3"};
bool pass = xxxxx::yyyyy(Argv.begin(), Argv.end(), Tri);
我认为这是非法的,因为const char *
它不是用户定义的类型。但是,我不确定如何解决这个问题。我需要更改第一行还是第二行?或两者?
Argv
是一个数组(const char*
s),是的,你不能调用begin()
,end()
正如你的代码所示,数组没有这样的成员函数。相反,您可以使用std::begin
它std::end
。
const char *Argv[] = {"stuff", "stuff1", "stuff3"};
bool pass = xxxxx::yyyyy(std::begin(Argv), std::end(Argv), Tri);
如果您使用其他标准容器,例如std::vector
or std::array
,那么您可以调用成员函数begin()
并end()
对其进行调用。请注意,即使对于这些容器,您仍然可以在它们上使用std::begin
and ,这与调用它们的成员函数和std::end
具有相同的效果。begin()
end()
只是为了完整性,并显示 c++ 方式,您可以将第一行更改为:
std::array<std::string_view, 3> Argv {"stuff", "stuff1", "stuff3"};
然后是第二行:
bool pass = xxxxx::yyyyy(Argv.begin(), Argv.end(), Tri);
会工作得很好。