Проблема типа при включении кортежа

Я использую Visual Studio 2008 с Feature Pack 1.

У меня есть 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
  ...
};

2 ответа

Решение

Кажется, что при использовании typedef в качестве возвращаемого типа или локальной переменной, даже внутри класса, мне пришлось также квалифицировать его с помощью имени класса. Например, GetTile подпись в шапке должна была быть TileMap::tileInfo& GetTile( int x, int y ); Я думал, что вам не нужно делать это, когда функция находится в классе с typedef.

Убедитесь, что вы включили заголовочный файл с typedef ,

Похоже, компилятор не может видеть typedef так тип tileInfo по умолчанию int,

Другие вопросы по тегам