ожидаемый неквалифицированный идентификатор перед ‘{‘ токеном Ошибка с шаблонами

В настоящее время я пытаюсь интегрировать библиотеку (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

0

Решение

В некоторых системах abs () и другие, такие как min () и max (), реализованы как макросы препроцессора. Чтобы увидеть, так ли это для вас, добавьте строку

#undef abs

после этой строки:

#include <cstdlib>

Препроцессор не уважает пространства имен и будет слепо подставлять свое определение abs в ваш исходный код, прежде чем он будет передан компилятору, даже если результатом будет синтаксический хаос.

0

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

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