2014-02-18 1 views
4

Попытка скомпилировать проект C++, содержащий библиотеку SQL и получаю эти ошибки:Неоднозначный символ - не может преобразовать из Адо :: DataTypeEnum к DataTypeEnum

error C2664: 'CNCQuickADO::ConvertADOType' : cannot convert parameter 1 from 'ado20::DataTypeEnum' to 'DataTypeEnum' 
    Conversion to enumeration type requires an explicit cast 
error C2664: 'CNCQuickADO::ConvertADOType' : cannot convert parameter 1 from 'ado20::DataTypeEnum' to 'DataTypeEnum' 
    Conversion to enumeration type requires an explicit cast 
error C2872: 'DataTypeEnum' : ambiguous symbol 
    could be 'C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\dbdaoint.h : DataTypeEnum 
    or 'c:\amc\source\amthrottling\release\msado15.tlh : ado20::DataTypeEnum 

Я использую библиотеку SQL в ряде других проектов, не вопрос, как это. Поэтому я предполагаю, что это должно быть связано с тем, где я включаю библиотеку?

Может ли кто-нибудь помочь? Благодаря!

+0

Забыл упомянуть - C: \ AMC \ источник \ amthrottling является каталог проекта, в котором я работаю. – Raiden616

ответ

6

Возможно, у вас есть using namespace ado20 где-то в коде. Чтобы сообщить компилятору, что вы хотите использовать глобальный тип DataTypeEnum (что вы, вероятно, делаете с тех пор, как CNCQuickADO::ConvertADOType() ожидает суждения из сообщений об ошибках), объявите свою переменную (ы) с полным типом ::DataTypeEnum.

+0

Да, я действительно «использую пространство имен ado20», и да, это сработало. Как я уже сказал, я использовал библиотеку в другом месте без необходимости использовать :: перед переменными, но я просто изменил библиотеку, так что :: используется, и все это работает сейчас. Если так и должно быть, тогда это нормально .. ура! – Raiden616

0

namespace очень важный дизайн в C++.

В ado20::DataTypeEnum, ado20 - это пространство имен, DataTypeEnum - это имя в этом пространстве имен.

ado20::DataTypeEnum и othernamespace::DataTypeEnum - это разные переменные, которые отличаются от пространства имен.

C++ реализует это путем изменения имени переменной. Например, ado20::DataTypeEnum может обрабатываться как _ado20_DataTypeEnum, а othernamespace::DataTypeEnum - _othernamespace_DataTypeEnum.

Другой пример использования имен:

using namespace ado20; // declare the namespace 
// other code ... 
DateTypeEnum yourvariable; // now you can directly use variable in the namespace