2010-04-22 4 views
1

J'utilise Visual Studio 2008 Feature Pack 1.problème de type en incluant tuple

J'ai un typedef comme celui-ci typedef std::tr1::tuple<std::string, std::string, int> tileInfo avec une fonction comme celui-ci const tileInfo& GetTile(int x, int y) const.

Dans le fichier d'implémentation, la fonction a exactement la même signature (avec le qualificateur de nom de classe ajouté) et j'obtiens une erreur redefinition: different type modifiers. Il semble être à la recherche d'un int& au lieu d'un tileInfo&

Quand je souris sur le type de la fonction dans l'en-tête, à savoir tileInfo& il ouvre une petite barre en disant static const int tileInfo. Je pense que c'est peut-être le problème, mais je ne sais pas quoi faire. Cela m'amène à croire que le compilateur pense que std::tr1::tuple<std::string, std::string, int> est un static const int.

Toute aide est appréciée, merci.

P.S. Voici un exemple imitant la même situation, juste compacté au minimum.

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

Répondre

0

Il semble que lorsque j'utilise le typedef comme type de retour ou comme variable locale, même dans la classe, je dois le qualifier avec le nom de la classe. Par exemple la signature GetTile dans l'en-tête aurait dû être TileMap::tileInfo& GetTile(int x, int y); Je pensais que vous n'aviez pas besoin de faire cela lorsque la fonction est dans la classe avec le typedef.

2

Assurez-vous que vous avez inclus le fichier d'en-tête avec le typedef.

Il semble que le compilateur ne peut pas voir le typedef de sorte que le type de tileInfo par défaut int.

+0

Il est inclus. Ce que j'ai décrit en dernier lieu apparaît dans l'en-tête. La signature de la fonction est en dessous du typedef dans la visibilité publique. – Person

+0

incluez-vous 'tuple' et' string' avant de définir typedef? – stefanB

+0

Oui. Ils sont inclus. – Person