【发布时间】:2026-01-27 14:35:01
【问题描述】:
我目前正在尝试将一个库 (IsoAgLib) 集成到我的 CPP 项目中。我对 CPP 没有很深的经验。我得到的错误是:“'{'令牌之前的预期不合格ID”。我相信这与模板有关,因为我遇到了其他类似的问题。它也可能与 abs 函数调用有关。任何帮助将非常感激!
编辑:我在模板之后省略了代码,文件很大
错误 45 应在“{”令牌之前出现不合格 ID
错误 47 预期在 ')' 标记之前的不合格 ID
错误 46 预期 ')' 在 '{' 令牌之前
所有这些错误都发生在第 31 行,即“模板内联 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
【问题讨论】:
-
可以在文件末尾添加一个}来关闭命名空间语句
-
请注意,带有两个下划线或以下划线后跟一个大写字母的名称是为实现(编译器)保留的,不应使用。
-
@user2291405 你提到的错误应该告诉你哪一行发生了错误。您可以将其添加到您的问题中吗?
-
你的头文件中是否有
#define abs? -
那就是问题所在。宏不尊重任何东西。无论你在哪里写
abs,预处理器都会立即用宏文本替换它,甚至不给编译器查看它的机会。