包含元组时输入问题

时间:2010-04-22 03:07:41

标签: c++ tuples tr1

我正在使用带有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

感谢任何帮助,谢谢。

P.S。这是一个模拟相同情况的示例,只是压缩到最小。

#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
  ...
};

2 个答案:

答案 0 :(得分:2)

确保您使用typedef包含头文件。

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

答案 1 :(得分:0)

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