“On attend de l'initialiseur avant '<' token” dans le fichier d'en-tête

Je suis assez nouveau dans la programmation et je suis généralement confus par les fichiers d'en-tête et comprend. Je voudrais de l'aide immédiatement compiler problème et il serait souhaitable que des suggestions d'ordre général sur plus propre, plus sûr, plus lisse façons d'écrire mon code.

Je suis en train de reconditionnement beaucoup de code qui sert à être dans le main() dans un Simulation classe. J'ai une erreur de compilation avec le fichier d'en-tête pour cette classe. Je compile avec gcc version 4.2.1.

 //Simulation.h
#ifndef SIMULATION_H
#define SIMULATION_H
#include <cstdlib>
#include <iostream>
#include <cmath>
#include <string>
#include <fstream>
#include <set>
#include <boost/multi_index_container.hpp>
#include <boost/multi_index/hashed_index.hpp>
#include <boost/multi_index/member.hpp>
#include <boost/multi_index/ordered_index.hpp>
#include <boost/multi_index/mem_fun.hpp>
#include <boost/multi_index/composite_key.hpp> 
#include <boost/shared_ptr.hpp>
#include <boost/tuple/tuple_comparison.hpp>
#include <boost/tuple/tuple_io.hpp>
#include "Parameters.h"
#include "Host.h"
#include "rng.h"
#include "Event.h"
#include "Rdraws.h"
typedef multi_index_container< //line 33 - first error
boost::shared_ptr< Host >,
indexed_by< 
hashed_unique< const_mem_fun<Host,int,&Host::getID> >, //0 - ID index
ordered_non_unique< tag<age>,const_mem_fun<Host,int,&Host::getAgeInY> >, //1 - Age index
hashed_non_unique< tag<household>,const_mem_fun<Host,int,&Host::getHousehold> >, //2 - Household index
ordered_non_unique< //3 - Eligible by age & household
tag<aeh>,
composite_key<
Host,
const_mem_fun<Host,int,&Host::getAgeInY>,
const_mem_fun<Host,bool,&Host::isEligible>,
const_mem_fun<Host,int,&Host::getHousehold>
>
>,
ordered_non_unique< //4 - Eligible by household (all single adults)
tag<eh>,
composite_key<
Host,
const_mem_fun<Host,bool,&Host::isEligible>,
const_mem_fun<Host,int,&Host::getHousehold>
>
>,
ordered_non_unique< //5 - Household & age
tag<ah>,
composite_key<
Host,
const_mem_fun<Host,int,&Host::getHousehold>,
const_mem_fun<Host,int,&Host::getAgeInY>
>
>
> //end indexed_by
> HostContainer; 
typedef std::set<int> HHSet;
class Simulation
{
public:
Simulation( int sid );
~Simulation();
//MEMBER FUNCTION PROTOTYPES
void runDemSim( void );
void runEpidSim( void );
void ageHost( int id );
int calcPartnerAge( int a );
void executeEvent( Event & te );
void killHost( int id );
void pairHost( int id );
void partner2Hosts( int id1, int id2 );
void fledgeHost( int id );
void birthHost( int id );
void calcSI( void );
double beta_ij_h( int ai, int aj, int s );
double beta_ij_nh( int ai, int aj, int s );
private:
//SIMULATION OBJECTS
double t;
double outputStrobe;
int idCtr;
int hholdCtr;
int simID;
RNG rgen;
HostContainer allHosts; //shared_ptr to Hosts - line 102 - second error
HHSet allHouseholds; 
int numInfecteds[ INIT_NUM_AGE_CATS ][ INIT_NUM_STYPES ]; 
EventPQ currentEvents; 
//STREAM MANAGEMENT
void writeOutput();
void initOutput();
void closeOutput();
std::ofstream ageDistStream;
std::ofstream ageDistTStream;
std::ofstream hhDistStream;
std::ofstream hhDistTStream;
std::string ageDistFile;
std::string ageDistTFile;
std::string hhDistFile; 
std::string hhDistTFile;
};
#endif

Je suis en espérant que les autres fichiers ne sont pas pertinents pour ce problème. Quand je compile avec

g++ -g -o -c a.out -I /Applications/boost_1_42_0/ Host.cpp Simulation.cpp rng.cpp main.cpp Rdraws.cpp 

- Je obtenir

Simulation.h:33: error: expected initializer before '<' token
Simulation.h:102: error: 'HostContainer' does not name a type

et puis un tas d'autres erreurs liées à la non-reconnaissance de la HostContainer.

Il semble que j'ai tous le droit de Stimuler #inclut pour la HostContainer à être compris. Quoi d'autre pourrait mal se passer?

J'apprécierais immédiate des suggestions, des conseils de dépannage, et d'autres conseils sur mon code. Mon plan est de créer une "HostContainer.h" fichier qui contient la définition de type et les structures qui définissent ses balises, semblable à ce que je suis en train de faire dans "l'Événement.h" pour le EventPQ conteneur. Je suppose que c'est légal et de la bonne forme.

Vous devriez sérieusement envisager la rupture de la définition de type; typedef petits morceaux, puis le construire à l'aide de ceux-ci.
Pourriez-vous me donner un exemple de la façon dont vous pourriez le casser?
Assurez-vous; je l'ai posté une réponse, car il est beaucoup trop long pour poster un commentaire.

OriginalL'auteur Sarah | 2010-05-07