Ошибка переопределения OpenGL при компиляции конфликта glm с файлами Windows SDK

Когда я добавляю модуль (используя OpenGL а также glm) (который протестировал и скомпилировал OK как отдельную программу) в большую программу. ошибки произошли при компиляции glm в проекте:

1>d:\program files (x86)\microsoft visual studio 9.0\vc\include\glm\core\type_gentype.hpp(48) : error C2332: “class”: missing tag name
1>d:\program files (x86)\microsoft visual studio 9.0\vc\include\glm\core\type_gentype.hpp(48) : error C2011: “<unnamed-tag>”: “enum” type redefinition
1>        c:\program files\microsoft sdks\windows\v6.0a\include\shlobj.h(3599) : see declaration of '<unnamed-tag>'

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

код в type_gentype.hppкод находится в GLM.

namespace glm
{
enum profile
{
nice,
fast,
simd
};

namespace detail
{
template
<
typename VALTYPE,
template <typename> class TYPE   //**The error indicator pointing at here**
>
struct genType
{
public:
enum ctor{null};

typedef VALTYPE value_type;
typedef VALTYPE & value_reference;
typedef VALTYPE * value_pointer;
typedef VALTYPE const * value_const_pointer;
typedef TYPE<bool> bool_type;

typedef sizeType size_type;
static bool is_vector();
static bool is_matrix();

typedef TYPE<VALTYPE> type;
typedef TYPE<VALTYPE> * pointer;
typedef TYPE<VALTYPE> const * const_pointer;
typedef TYPE<VALTYPE> const * const const_pointer_const;
typedef TYPE<VALTYPE> * const pointer_const;
typedef TYPE<VALTYPE> & reference;
typedef TYPE<VALTYPE> const & const_reference;
typedef TYPE<VALTYPE> const & param_type;

//////////////////////////////////////
// Address (Implementation details)

value_const_pointer value_address() const{return value_pointer(this);}
value_pointer value_address(){return value_pointer(this);}

//protected:
//  enum kind
//  {
//      GEN_TYPE,
//      VEC_TYPE,
//      MAT_TYPE
//  };

//  typedef typename TYPE::kind kind;
};

template
<
typename VALTYPE,
template <typename> class TYPE
>
bool genType<VALTYPE, TYPE>::is_vector()
{
return true;
}

Часть переопределения enum в c:\program files\microsoft sdks\windows\v6.0a\include\shlobj.h(3599)

enum
{   // **The error indicator pointing at here**
BMICON_LARGE = 0,
BMICON_SMALL
};

#undef  INTERFACE
#define INTERFACE   IBanneredBar
// the rest of the shlobj.h file

0

Решение

Что касается BMICON_LARGE, это звучит так, как будто уже существует предопределенное значение константы / перечисления с этим именем. Лучшее решение — просто использовать другое имя. Если вам абсолютно необходимо иметь это точное имя, поместите его в свое собственное пространство имен; или вы можете использовать уже определенное значение.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]