2015-06-05 8 views
0

У меня есть проект (VS2012), который использует SDK 0.5.0.1. SDK включает в себя класс System в пространстве имен OVR (OVR :: System). В классе, который я написал, я использую :: System. Это работает, и это не то, что дает мне проблему. Когда я компилирую, я получаю ошибку C2872: «System»: неоднозначный символ, а проблемные файлы - это typeinfo, xlocale и xiosbase в C: .... \ Microsoft Visual Studio 12.0 \ VC \ include. Ошибка говорит, что «Система» может быть либо «Система», либо OVR :: System. Есть ли способ обойти это? Как я могу заставить typeinfo, xlocale и xiosbase использовать :: System, а не OVR :: System, без изменения содержимого файлов (чего я не хочу делать)?Получение «Системы»: ошибка неоднозначного символа с использованием C++ CLI

+3

Не используйте пространство имен с помощью ОВР; –

+2

Добро пожаловать в переполнение стека! Предоставьте [SSCCE] (http://sscce.org). – NathanOliver

+0

Непонятно из вашего вопроса: вы получаете ошибки компиляции в вашем файле CPP или получаете ошибки * в файлах заголовков *, когда вы включаете их из своего CPP? –

ответ

1

Директива A using namespace OVR; не должна быть проблемой, если вы не написали ее выше своих директив #include.

Ссылки на файлы заголовков библиотек всегда должны появляться перед вашим собственным кодом, точно так, чтобы такого рода вещи не происходили. Единственное исключение - когда библиотечная документация говорит вам определить конкретный макрос для управления поведением библиотеки, в этом случае библиотека предназначена для работы с вашим определением.

Bad:

using namespace OVR; 
#include <typeinfo> 
#include <locale> 

Хорошо:

#include <typeinfo> 
#include <locale> 
using namespace OVR;