В настоящее время я пытаюсь интегрировать библиотеку (IsoAgLib) в мой проект CPP. Я не очень опытен с CPP. Я получаю сообщение об ошибке: «ожидаемый неквалифицированный идентификатор перед символом {{» ». Я считаю, что это как-то связано с шаблонами, так как я сталкивался с другими подобными проблемами. Это также может быть связано с вызовом функции abs. Любая помощь приветствуется!
РЕДАКТИРОВАТЬ: я оставляю код после шаблона, файл довольно большой
Ошибка 45: ожидаемый неквалифицированный идентификатор перед токеном ‘{‘
Ошибка 47: ожидание неквалифицированного идентификатора перед маркером ‘)’
Ошибка 46 ожидается ‘)’ перед ‘{‘ токеном
все эти ошибки происходят в строке 31, которая является «шаблоном inline T abs» (const T& val) «(я оставил комментарий в начале)
#ifndef UTIL_FUNCS_H
#define UTIL_FUNCS_H
#include <IsoAgLib/isoaglib_config.h>
#ifdef USE_DATASTREAMS_IO
class StreamInput_c;
#endif
#include <cstdlib> // Include before vector or else CNAMESPACE stuff is screwed up for Tasking
#include <cstring>
#include <vector>
#ifdef USE_VT_UNICODE_SUPPORT
#include <string>
#endif
// Begin Namespace __IsoAgLib
namespace __IsoAgLib
{
template <class T> inline T abs(const T& val)
{
return (val < 0) ? (-val) : val;
}
} // end of namespace __IsoAgLib
#endif
В некоторых системах abs () и другие, такие как min () и max (), реализованы как макросы препроцессора. Чтобы увидеть, так ли это для вас, добавьте строку
#undef abs
после этой строки:
#include <cstdlib>
Препроцессор не уважает пространства имен и будет слепо подставлять свое определение abs в ваш исходный код, прежде чем он будет передан компилятору, даже если результатом будет синтаксический хаос.
Других решений пока нет …