Смущен областью пространства имен! - PullRequest
2 голосов
/ 17 марта 2011

Я запутался в объёме деклараций «использования пространства имен» ... надеюсь, что кто-нибудь может прояснить это для меня!

Я использую две библиотеки (OpenCV и Ogre3D).У меня есть два файла cpp, один использует исключительно OpenCV (PoseEstimator.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' является only вхождением во всем проекте (я дважды проверил, выполнив поиск),Они не используют пространство имен в заголовках, только в файлах cpp.

Однако при компиляции OgreLogic.cpp я получаю ошибки неоднозначности, например:

cxmat.hpp (3465): ошибка C2872: 'uchar': неоднозначный символ 1> может быть 'd: \ library \ opencv2.1 \ include \ opencv \ cxtypes.h (154): unsigned char uchar' 1> или
'd: \ library\ ogresdk \ include \ ogre \ OgrePrerequisites.h (106): Ogre :: uchar '

Мне кажется, что-то не так, потому что я думаю, что все должно быть в порядке?

Любойочень признателен за помощь!

Спасибо,

Джек

Ответы [ 2 ]

1 голос
/ 17 марта 2011

Основная проблема в том, что uchar в cxtypes.h - , а не в пространстве имен cv.uchar в OrgePrerequisites.h равно в пространстве имен Orge (следовательно, Ogre: :).Добавляя using namespace Ogre;, вы фактически делаете любую ссылку на uchar неоднозначную.

Как отметили spbots, вы можете удалить использование пространства имен, чтобы решить вашу проблему, но я хотел обратиться к вашему корневому вопросу о пространствах имен.Ответ / проблема в том, что другой uchar (cxtypes one) вообще не находится в пространстве имен.Он просто объявляется в заголовочном файле вне любого пространства имен.

1 голос
/ 17 марта 2011

Похоже, что у вас есть строка, объявляющая uchar, например, uchar x = 12 или что-то. В верхней части файла вы указали, что используете пространство имен Ogre. Компилятор сталкивается с проблемой, определяющей, какой uchar вы используете - один cxtypes.h или Ogre :: uchar.

Попробуйте убрать using namespace Ogre; и выполните вызовы функций как Ogre::doStuff(), чтобы устранить неоднозначность.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...