1

我正在使用带有 Feature Pack 1 的 Visual Studio 2008。

我有一个像这样的 typedef 和这样typedef std::tr1::tuple<std::string, std::string, int> tileInfo 的函数const tileInfo& GetTile( int x, int y ) const

在实现文件中,该函数具有完全相同的签名(带有添加的类名限定符),我收到redefinition: different type modifiers错误消息。它似乎在寻找一个int&而不是一个tileInfo&

当我将鼠标悬停在标题中的函数类型上时,即tileInfo&会出现一个小条说static const int tileInfo. 我认为这可能是问题所在,但我不确定该怎么做。它让我相信编译器认为std::tr1::tuple<std::string, std::string, int>static const int.

任何帮助表示赞赏,谢谢。

PS 这是一个模拟相同情况的示例,只是压缩到最低限度。

#include <tuple>

class Blah {
 public:
  typedef std::tr1::tuple<std::string, std::string, int> tileInfo;
  tileInfo& GetTile( int x, int y ); // When you mouse over tileInfo in this line, it says static const int
  ...
};
4

2 回答 2

2

确保您将头文件包含在typedef.

听起来编译器看不到typedef所以tileInfo默认类型为int.

于 2010-04-22T03:12:46.717 回答
0

似乎当使用 typedef 作为返回类型或局部变量时,即使在类中,我也必须使用类名来限定它。例如GetTile,标题中的签名应该是TileMap::tileInfo& GetTile( int x, int y );我认为当函数在具有 typedef 的类中时您不需要这样做。

于 2010-04-24T13:36:16.157 回答