C ++主函数的输入参数

时间:2017-07-15 07:52:46

标签: c++

我正在编写(学习)OpenCV代码,我希望用户能够输入cv :: String文件名(.xml)和双重类型参数

我的主要功能是

int main(int argc, const** argv) {
    ...

在cmd.exe中,我希望程序像

一样被调用
> App.exe cascadedClassifier.xml 0.5

其中cascadedClassifier.xml供用户选择分类,0.5是双重类型号,用于调整图像大小(框架)

我的一个问题是为什么输入参数是char类型但加载分类器文件的函数需要cv::String type但它仍然可以在cmd.exe中工作,即使它们是两种不同类型的参数?

另一个问题是我应该在main函数的输入参数中做什么,用户可以在cmd.exe中为程序自由分配双类型输入?

提前致谢。

2 个答案:

答案 0 :(得分:5)

  1. C ++语言规范定义了int main(int argc, char* argv[]) entrypoint function - 它与OpenCV完全无关 - 类似OpenCV也不关心你的程序的入口点:OpenCV是一个库,而不是应用程序框架(如MFC或Qt)。

  2. OpenCV的cv::String类型defines a constructor from const char* s,用于向cv::String提供an implicit conversion

  3. 所有命令行参数都是通过argv传入的,你不能用标准的C / C ++ char入口点传入非main - 类型的参数(这个是因为C和C ++没有定义传递非字符串参数的约定,例如,PowerShell,其中Cmdlet参数是根据.NET类型定义的)。您需要使用atofsscanf将参数转换回类型化数据。

答案 1 :(得分:1)

const char*可以根据the official cv::String Class Reference隐式转换为cv::String 在命令行中,双输入在技术上是不可能的。您可以使用atof(const char*)函数将char*类型转换为函数中的float / double类型。