0

我目前正在尝试将一个库(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
4

1 回答 1

0

在某些系统上 abs() 和其他系统,例如 min() 和 max() 被实现为预处理器宏。要查看您是否属于这种情况,请添加以下行

#undef abs

在这一行之后:

#include <cstdlib>

预处理器不尊重命名空间,并且会在将其提供给编译器之前盲目地将其 abs 定义替换到您的源代码中,即使结果是语法混乱。

于 2013-04-18T08:31:48.677 回答