2011-03-17 54 views
2

我對'使用命名空間'聲明的範圍感到困惑......希望有人能爲我解決這個問題!對命名空間範圍感到困惑!

我使用兩個庫(OpenCV和Ogre3D)。我有兩個cpp文件,一個專門使用OpenCV(Pos​​eEstimator.cpp),另一個專門使用Ogre3D(OgreLogic.cpp)。

OgreLogic.cpp的頂部看起來是這樣的:

#include "stdafx.h" 

#include "PoseEstimator.h" 
#include "OgreLogic.h" 

using namespace Ogre; 

而且PoseEstimator.cpp的頂部看起來是這樣的:

#include "StdAfx.h" 
#include "PoseEstimator.h" 

using namespace cv; 
using namespace std; 

這 '使用命名空間CV' 只是在整個項目中發生(我通過搜索進行雙重檢查)。沒有'在標題中使用命名空間,只有在cpp文件中。

然而,編譯OgreLogic.cpp當我得到模棱兩可的錯誤,如:

cxmat.hpp(3465):錯誤C2872: 'UCHAR' :曖昧的符號1>可能是 「D:\ libraries \ opencv2.1 \ include \ opencv \ cxtypes.h(154) :unsigned char uchar'1> or
'd:\ libraries \ ogresdk \ include \ ogre \ OgrePrerequisites.h(106) :Ogre :: uchar'

我好像誤會了什麼,因爲我認爲這應該是好的?

任何幫助非常感謝!

感謝,

傑克

回答

1

它看起來像正在發生的事情是,你有一個行聲明uchar,例如uchar x = 12什麼的。在文件的頂部,你已經指定你正在使用Ogre命名空間。編譯器遇到了一個問題,確定您正在使用哪個uchar - cxtypes.h或Ogre :: uchar。

嘗試取出using namespace Ogre;並執行函數調用Ogre::doStuff()以消除歧義。

+0

謝謝你的幫助。 我通過將cxmat.hpp(openCV頭)中的uchar引用更改爲unsigned char來「解決」了問題。 似乎現在工作! – 2011-03-17 15:37:16

+0

沒問題 - 它工作嗎? – spbots 2011-03-17 15:38:10

+0

不小心發佈了,試圖按下輸入做一個新的行,但被抓出來! – 2011-03-17 15:41:59

1

根本問題是在cv名稱空間中,cxtypes.h中的uchar而不是。 OrgePrerequisites.h 中的uchar在Orge命名空間中爲(因此Ogre::)。通過添加using namespace Ogre;您實際上對uchar有任何參考含糊不清。

正如spbots指出的那樣,您可以刪除名稱空間用法來解決您的問題,但我想解決有關名稱空間的根問題。答案/問題是其他uchar(cxtypes之一)完全不在名稱空間中。它只是在任何名稱空間之外的頭文件中聲明。