0

最近,在我的项目中添加了一个头文件后,我无法编译我的应用程序 - 我添加了空白头文件,然后出现了奇怪的错误:

[bcc32 Error] SystemTypes.h(79): E2268 Call to undefined function 'hypot'
[bcc32 Error] SystemTypes.h(511): E2268 Call to undefined function 'ceil'
[bcc32 Error] SystemTypes.h(525): E2268 Call to undefined function 'fabs'

这些错误“不知从何而来”——我还玩了另一个空项目,它们是在将调试模式更改为发布后出现的。我该如何修复它们?我不知道他们为什么出现。您可以在下面看到一个错误的完整解析器上下文:

  Full parser context
    Project3.cpp(3): #include c:\program files (x86)\embarcadero\studio\16.0\include\windows\vcl\vcl.h
    vcl.h(10): #include c:\program files (x86)\embarcadero\studio\16.0\include\windows\vcl\basepch0.h
    basepch0.h(63): #include c:\program files (x86)\embarcadero\studio\16.0\include\windows\rtl\System.Types.hpp
    System.Types.hpp(19): #include c:\program files (x86)\embarcadero\studio\16.0\include\windows\rtl\SystemTypes.h
    SystemTypes.h(32): namespace System
    SystemTypes.h(32): namespace Types
    SystemTypes.h(33): class TSmallPoint
    SystemTypes.h(87): decision to instantiate: double TSmallPoint::Distance(const TSmallPoint &) const
    --- Resetting parser context for instantiation...
    SystemTypes.h(84): parsing: double TSmallPoint::Distance(const TSmallPoint &) const
4

2 回答 2

0

你需要这个包含语句:

#include <math.h>
于 2015-08-20T15:05:22.300 回答
0

简短回答:正如@Flame spotter 所说#include <math.h>.

长答案:这些消息告诉您出了什么问题:

SystemTypes.h(87): decision to instantiate: double TSmallPoint::Distance(const TSmallPoint &) const
--- Resetting parser context for instantiation...
SystemTypes.h(84): parsing: double TSmallPoint::Distance(const TSmallPoint &) const

所以编译器试图实例化TSmallPoint::Distance并遇到了问题。如果您查看 的实现TSmallPoint::Distance,您会看到如下内容:

double Distance(const TSmallPoint& p2) const _ALWAYS_INLINE {
  return hypot(p2.x - this->x, p2.y - this->y);
} 

还有一个神秘的参考hypot给你带来了麻烦。SystemTypes.hhypot不包括自身的事实<math.h>是一个错误。它已在我的 XE2 副本中修复(我没有 XE 来检查自己),但您应该能够通过包含<math.h>. (如果需要,您甚至可以SystemTypes.h在此处编辑和添加包含。)

至于为什么它出现在发布版本而不是调试版本中 - 我不确定。它是一个内联函数,并且内联函数在发布版本和调试版本中的处理方式通常不同,并且对“实例化”的引用听起来也可能正在进行一些模板实例化,这会使事情变得更加复杂。C++Builder 的编译器不是很符合标准,而且我并不总是理解它是如何以及何时决定抱怨某事的。

于 2015-08-20T16:15:10.583 回答