【问题标题】:C++ map: expected initializer before ‘<’ tokenC++ 映射:“<”标记之前的预期初始化程序
【发布时间】:2011-12-11 11:59:28
【问题描述】:

我在头文件中收到此错误:

错误:“

class MyEntity;
typedef std::map<uint16,MyEntity*> myList_t;

我认为它没有看到地图包含,但在该头文件的顶部是:

#include <list>
#include <map>

在另一个头文件中:

typedef unsigned int               uint32;

有什么想法吗?

g++ (GCC) 4.1.2 20080704(红帽 4.1.2-48)

【问题讨论】:

  • 你确定这是正确的行吗?你能发布一个重现错误的完整示例吗?
  • 能否告诉我们,您使用的是哪个编译器,以及在哪个平台上?谢谢
  • 如果我输入“typedef short uint16;”行,这段代码会为我编译在它面前。你的 uint16 类型是在哪里定义的?
  • 你确定uint16 是一个类型吗?标准类型称为uint16_t 等。
  • 尝试提供一个仍然存在此错误的最小完整示例。您可能会自己发现错误,如果没有,我们将能够更好地提供帮助。

标签: c++ map compiler-errors


【解决方案1】:

有一个名为 map 的宏导致了冲突。

【讨论】:

  • 这就是为什么宏需要全部大写。
  • 是的。 #define _MAP_H 一旦我将其更改为 BMAP 和地图文件,它就被修复了。
  • 您应该使用MAP_H 而不是_MAP_H。以下划线开头后跟另一个下划线或大写字母的标识符是为 C 编译器和/或库保留的。
【解决方案2】:

在您的实际代码(不是您的简化示例)中,您可能在typedef 之前的行尾缺少;。这通常是当我收到那种神秘错误时的意思,我几乎可以通过在其上方放置另一个被削弱的typedef 来重现您的消息:

q.cc:8: error: expected initializer before 'typedef'

我的第一个猜测是 class MyEntity 是一个完整的定义(不是前向声明)并且缺少 ; 但我得到的错误略有不同。

【讨论】:

  • 几乎,但不完全相同的错误消息,这里的差异很大。
  • 错误消息将取决于上面一行的内容,我怀疑问题中没有重现。
  • 在这种情况下,如果上面的行缺少分号或类似的东西,错误将始终由关键字typedef引起。编译器将到达&lt;,如 OP 的错误消息所示。
  • 此文件中使用的每个地图都会出现相同的错误,其余代码没有任何奇怪的错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-26
  • 1970-01-01
相关资源
最近更新 更多