我正在使用带有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
...
};
答案 0 :(得分:2)
确保您使用typedef
包含头文件。
听起来好像编译器看不到typedef
所以tileInfo
的类型默认为int
。
答案 1 :(得分:0)
似乎当使用typedef作为返回类型或局部变量时,即使在类中,我也必须使用类名来限定它。例如,标题中的GetTile
签名应该是TileMap::tileInfo& GetTile( int x, int y );
我认为当函数位于具有typedef的类中时,您不需要这样做。