(C ++和gcc)错误:'内联'之前的预期构造函数,析构函数或类型转换

时间:2009-08-04 14:26:24

标签: c++ gcc compiler-errors

我有一个包含一些内联模板方法的头文件。我向它添加了一个类声明(只是几个静态方法......它更像是一个命名空间而不是一个类),我开始在使用该新类的文件中得到这个编译错误。

还有其他一些文件包含相同的.h文件,但仍然无需投诉即可编译。

谷歌搜索错误给了我一堆链接到邮件列表有关具有类似错误消息的项目上的错误(唯一的区别似乎是构造函数,析构函数或类型转换应该在什么之前)。

我准备好开始剥离其他所有东西,直到我有一个简单的最小样本,所以我可以聪明地问这个问题,但我想我先试着用愚蠢的方式先问:

任何人都可以给我一个基本的线索,了解这个错误消息实际上意味着什么所以我可以开始跟踪它/谷歌吗?

为了完整起见,我看到这个的第一个例子看起来或多或少像

namespace Utilities
{
   template <typename T> GLfloat inline NormalizeHorizontally(T x)
   {
      GLfloat scaledUp = x*2.0;
      GLfloat result = scaledUp / Global::Geometry::ExpectedResolutionX;
      return result;
   }
}

1 个答案:

答案 0 :(得分:8)

这意味着您将“inline”关键字放在错误的位置。它需要在方法的返回类型之前,例如

 template <typename T> inline GLfloat  NormalizeHorizontally(T x)

这很简单。

您在一个编译单元而不是其他编译单元上获得此消息的原因可能是因为它是一个模板化函数,未从其他编译单元实例化。

通常,如果你得到“foobar之前的预期等等”错误,这是一个解析错误,它通常表示一个简单的语法错误,例如缺少分号,缺少大括号或错误的关键字。问题通常在提到的部分附近,但实际上可能会有一段时间,所以有时候你必须去寻找它。