错误:'vector'没有命名类型/错误:在'<'之前预期','或'...'令牌/错误:'vector'尚未声明

时间:2015-06-18 14:54:32

标签: c++ qt opencv ubuntu vector

我在Ubuntu 15.04上使用Qt Creator。我刚刚使用文档网站上提供的脚本安装了OpenCV 3.0(此处:https://help.ubuntu.com/community/OpenCV)。编译我的代码时,我得到一些错误(在运行脚本之前不存在):

  

/usr/include/opencv2/gpu/gpu.hpp:432:错误:'vector'没有命名类型    CV_EXPORTS void merge(const vector& src,GpuMat& dst,Stream& stream = Stream :: Null());

     

/usr/include/opencv2/gpu/gpu.hpp:432:错误:在'<'之前预期','或'...'令牌[..]

     

/usr/include/opencv2/gpu/gpu.hpp:438:错误:'vector'尚未声明[..]

除了第一个错误之外,所有错误都列在'gpu.hpp'中:

  

/ [..] / main.cpp:6:包含在../ [..] / main.cpp:6:0中的文件中:

指的是我把opencv2 / gpu / gpu.hpp包含在其中的行。

我经常搜索Stackoverflow并在包含之前移动'使用命名空间std',但这只是改变了错误类型(它们都转向

  

错误:未定义引用`cv :: Mat :: zeros(int,int,int)'

或类似的东西)。

我放在代码顶部的包含是:

  • 的iostream
  • stdio.h
  • opencv2 / opencv.hpp,opencv2 / highgui / highgui_c.h,opencv2 / imgproc / imgproc_c.h,opencv2 / gpu / gpu.hpp,opencv2 / core / core.hpp
  • vector
  • math.h中
  • cmath
  • list
  • fstream
  • string
  • 了iomanip

+

  

使用namespace std;

     

使用命名空间cv;

我的.pro项目文件是:

  

QT + =核心gui

     

greaterThan(QT_MAJOR_VERSION,4):QT + =小部件

     

TARGET = FinalMultimedia

     

TEMPLATE = app

     

LIBS + = -lopencv_core

     

LIBS + = -lopencv_imgproc

     

LIBS + = -lopencv_highgui

     

SOURCES + = main.cpp \

运行Makefile(make VERBOSE = 1)我得到:

  

g ++ -c -m64 -pipe -g -Wall -W -D_REENTRANT -fPIE -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -I ../ try -I。 -isystem / usr / include / x86_64-linux-gnu / qt5 -isystem / usr / include / x86_64-linux-gnu / qt5 / QtWidgets -isystem / usr / include / x86_64-linux-gnu / qt5 / QtGui -isystem / usr / include / x86_64-linux-gnu / qt5 / QtCore -I。 -I / usr / lib / x86_64-linux-gnu / qt5 / mkspecs / linux -g ++ - 64 -o main.o ../ try / main.cpp

其中opencv库根本没有出现(dunno为什么)。我正在使用刚刚运行更新/升级的gcc / g ++,所以我猜它将是5.1.1。我是一个完整的Linux初学者,所以我想弄清楚。有帮助吗?非常感谢你。

更新:

我尝试使用相同的代码创建一个新的Eclipse项目。我设置了正确的include / libraries(之前在ecplipse中使用过opencv / c ++)。我犯了同样的错误。 WTF

1 个答案:

答案 0 :(得分:1)

移动命名空间行确实解决了编译问题。未定义的引用是一个链接问题。恭喜!那是进步。

现在您只需要确定哪个opencv lib具有该符号并确认您的搜索路径正在那里(它们可能不是)。您可以使用readelf查看任何特定库中的符号。您丢失的符号可能应该在opencv_core中,但我不知道。你必须确认。 nm也可以帮到你。使用man查看它们的工作原理 - 两者都很简单。

您还可以跟踪Qt创建的make文件,并从命令行使用它。添加VERBOSE = 1以查看所要求的每个库,以及为库搜索拼写的每个路径。