2013-02-28 80 views
0

我已付出的OpenCV的专业模板,当我尝试了一个专门的模板代码的一次修改,我的命名空间中,我得到的错误:无法从另一个命名空间

make -k 

[100%] Building CXX object object_detection.cpp.o 
In file included from object_detection.cpp:1:0: 
object_detection.h:370:75: error: specialization of 'void cv::Ptr<_Tp>::delete_obj() [with _Tp = CvHaarClassifierCascade]' in different namespace [-fpermissive] 
object_detection.h:370:30: error: from definition of 'void cv::Ptr<_Tp>::delete_obj() [with _Tp = CvHaarClassifierCascade]' [-fpermissive] 

我明白我不应该能够在不同的命名空间专门化模板代码,但有没有出路?

+0

在'cv'命名空间中专门化它有什么问题?只需用'namespace cv {'' – 2013-02-28 19:25:41

+0

将你的专业化包装在同一个命名空间中?用'命名空间cv {(专门化)'来环绕你的专业化'' – Cornstalks 2013-02-28 19:26:01

+0

是的,我能够做到这一点。我只是想知道我是否只能在1个命名空间中使用这种专业化。但我会继续这样做。谢谢 – navderm 2013-03-01 13:34:23

回答

0
  1. 重新打开它们的命名空间,并专注于它。
  2. 对于函数,如果通过ADL忠实地使用函数,请在参数的名称空间中创建覆盖。
  3. 检查源模板是否使用traits类或其他类似的技术,您可以拦截它。
相关问题