c++ - 特殊编译错误 : ‘cap’ does not name a type

标签 c++ opencv gcc

我遇到了一个似乎违背我所有逻辑的编译时错误。以下三个代码片段有效,而第三个无效。为什么?

作品 1

#include "opencv2/opencv.hpp"

cv::VideoCapture cap(0); 

int main()
{
        return 0;
}

作品 2

#include "opencv2/opencv.hpp"

int main()
{
    cv::VideoCapture cap(0);
    return 0;
}

作品 3

#include "opencv2/opencv.hpp"

int main()
{
    cv::VideoCapture cap; 
    cap.open(0);
    return 0;
}

不起作用:

#include "opencv2/opencv.hpp"

cv::VideoCapture cap; 
cap.open(0);

int main()
{
    return 0;
}

我得到的错误是:

error: ‘cap’ does not name a type cap.open(0);

GCC 版本:6.1.1 20160501 OpenCV 版本:3.1.0-3

有什么问题吗?

最佳答案

您不能将 cap.open(0) 放在 main 之外,因为这是 C++ 的工作方式。但是 main 中的 cap.open(0) 可以正常工作。

作为一般规则,您不能在函数外部编写此类代码,编译器根本无法理解在运行时在哪里执行它。

关于c++ - 特殊编译错误 : ‘cap’ does not name a type,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37661400/

相关文章:

c++ - 比较 std::vector 在命名空间中使用自己的类不编译

c++ - ' t ' 在复制构造函数中表示什么?

algorithm - 如何有效地分割图像?

c++ - 不规则形状的 OpenCV 直方图

c++ - 当我尝试将 char* 分成标记时出现段错误

android - 使用 OpenCV 在 android 中进行图像拼接

c++ - msys 和 tdm-gcc : configure error - cannot run C compiled programs

gcc - STM32 ADC 连续转换模式不会自动启动转换

c - 使用 cmake 在 64 位 Linux 上构建 32 位共享库

c++ - 使用自定义 "front" vector 更新 "world up" vector 的正确方法是什么?