C++ STL carte typedef erreurs

Je suis vraiment très méchant problème avec un code que j'ai écrit. J'ai trouvé quelqu'un d'autre qui avait le même problème sur stackoverflow et j'ai essayé les solutions, mais aucune n'a fonctionné pour moi.

Je typedef plusieurs types STL que je l'utilise et aucun des autres ont tout problème, sauf quand j'essaie de typedef une carte.
Je reçois un "un_fichier.h:83: erreur: attendu initialiseur avant '<' token" erreur lors de l', y compris l'en-tête dans un programme de test.

Voici la partie importante de l'en-tête(un_fichier.h):

#ifndef SOME_FILE_H
#define SOME_FILE_H
//some syntax-correct enums+class prototypes
typedef std::string str;
typedef std::vector<Column> col_vec;
typedef col_vec::iterator col_vec_i;
typedef std::vector<Row> row_vec;
typedef row_vec::iterator row_vec_i;
typedef std::vector<str> str_vec;
typedef str_vec::iterator str_vec_i;
typedef std::vector<Object> obj_vec;
typedef obj_vec::iterator obj_vec_i;
typedef std::map<Column, Object> col_obj_map; //error occurs on this line
typedef std::pair<Column, Object> col_obj_pair;

L'inclut dans some_file.cpp sont:

#include <utility>
#include <map>
#include <vector>
#include <iostream>
#include <string>
#include <stdio.h>
#include <cc++/file.h>
#include "some_file.h"

Le fichier de test simplement la chaîne, vecteur, et mon fichier dans l'ordre. Il dispose d'une méthode principale qui fait juste un bonjour à tout le monde genre de chose.

Le plus drôle, c'est que j'ai rapidement jeté basé sur un modèle de classe pour voir où était le problème (en remplacement de la "std::map<Column..." avec "hello<Column...") et cela a fonctionné sans problème.

J'ai déjà créé la surcharge de l'opérateur requis par la carte si vous utilisez une classe sans " < ' opérateur.

Quel message d'erreur avez-vous?
Je dirais que c'est un bon exemple de l'abus typedef.
Et je dirais qu'il est beaucoup plus facile d'écrire col_vec au lieu de std::vector<Colonne>. En va de même pour l'itérateur, col_vec_i signifie tellement pour moi plus que std::vector<Colonne>::iterator. Il peut être "abus", mais il rend les choses plus faciles pour moi.
Je suis d'accord avec vous r0ssar00. Les typedefs rendre les choses plus facile de taper, de lire et de comprendre. L'avantage n'est pas aussi évident dans cet exemple, mais si jamais vous avez à travailler avec une map<string, vector<paire<double Objet*> > >, vous apprécierez la clarté de typedefs.
c'est un méchant-en regardant la carte, merci les devs de C++ pour les typedefs

OriginalL'auteur user150113 | 2009-08-04