我想cv::VideoCapture有条件地调用构造函数.如果argc == 2,则用户指定了视频文件,我想加载它.否则使用默认摄像头.
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
int main(int argc, char* argv[])
{
    VideoCapture cap(argc == 2 ? argv[1] : 0);
    return 0;
}
我编译并运行它
$ g++ -g -Wall -o main main.cpp `pkg-config opencv --cflags --libs`
$ ./main
但遗憾的是它似乎没有用,我得到了
OpenCV: Couldn't read movie file ""
三元运算符在一种情况下返回一个字符串,在另一种情况下返回一个整数.我认为这是行不通的,因为我不知道C++构造函数的一些特性.
做我想要的最干净的方法是什么?我可以不使用new这样做,所以我不必在程序结束时自己释放内存吗?
你过度复杂了.用途open:
VideoCapture cap;
if(argc == 2) {
    cap.open(argv[1]); // calls: open(const String& filename)
} else {
    cap.open(0);       // calls: open(int index) 
}
在三元运算符中,两个操作数必须是相同的类型.详情请见此处.但你有型int和char*,因此,即使该代码可以编译的,它可能会导致运行错误.