Проблема типа при включении кортежа - PullRequest
1 голос
/ 22 апреля 2010

Я использую 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.

Любая помощь приветствуется, спасибо.

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 ]

2 голосов
/ 22 апреля 2010

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

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

0 голосов
/ 24 апреля 2010

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

...