2011-11-03 5 views
-1

J'ai des difficultés à initialiser un vecteur de structures dans mon fichier d'en-tête.Vecteur C++ de discordance de structures

bins.h

#ifndef BINS_H 
#define BINS_H 

#include <vector>; 

using namespace std; 

struct bin 
{ 
//... 

    bin() { 
     //... 
     } 

}; 

class Bins { 

public: 

Bins(); 
vector<bin> getBins(); 
bin getBin(int i); 
//... 

private: 

vector<bin> bins; 

}; 

#endif 

erreurs

(This is line: vector<bin> getBins();) 
C:\...\bins.h:34: error: type/value mismatch at argument 1 in template parameter list for 'template<class _Tp, class _Alloc> class std::vector' 
C:\...\bins.h:34: error: expected a type, got 'bin' 
C:\...\bins.h:34: error: template argument 2 is invalid 

(This is line: bin getBin(int i);) 
C:\...\bins.h:35: error: 'bin' does not name a type 

(This is line: vector<bin> bins;) 
C:\...\bins.h:43: error: expected a type, got 'bin' 
C:\...\bins.h:43: error: template argument 2 is invalid 

Je n'ai pas beaucoup d'expérience avec C++; Cependant, j'ai utilisé des vecteurs de structures de cette façon auparavant sans aucun problème. Tout conseil est apprécié.

Modifier: Ceci est avec toutes les autres sections du code commentées.

+5

Vous n'avez pas besoin d'un point-virgule après une directive préprocesseur – Marlon

+3

'using namespace std;' dans un Le fichier d'en-tête est généralement considéré comme mauvais car il force la même chose sur tous ceux qui utilisent votre fichier d'en-tête sans qu'ils le sachent. – Flexo

+2

Le problème est dans la partie de votre programme que vous * n'avez pas * publiée. S'il vous plaît faire une copie de votre programme, et supprimer chaque ligne qui n'a rien à voir avec ce problème. Veuillez copier-coller le programme résultant dans votre question. Voir http://sscce.org pour les raisons pourquoi publier un programme qui est * sorte-de-like * le programme défaillant n'aide pas. –

Répondre

3

Couple de problèmes avec votre code ci-dessus.

Pas besoin ici virgule en incluant les en-têtes

#include <vector>; 

Ne mettez pas l'aide de directives dans vos têtes. Ce sera mieux si vous qualifiez pleinement son utilisation à la place

en utilisant namespace std;

L'autre que vous obtenez a à voir avec un conflit de nom avec bin - apparemment la bibliothèque standard l'utilise déjà pour quelque chose. Vous pouvez joindre votre bac dans son propre espace de noms ou mis en dans le cadre de votre classe Bins où il appartient probablement:

#include <vector> 

// dumping std namespace inside your header is bad 
// don't do this! 
// using namespace std; 

class Bins 
{ 
public: 
    struct bin 
    { 
    bin() {} 
    }; 

    Bins(); 
    std::vector<bin> getBins(); 
    bin getBin(int i); 

private: 
    std::vector<bin> bins; 
}; 
+0

C'était tout, merci. – Pax

1

réponse Crystal ball: Vous avez une de ces lignes de votre déclaration Bins:

int bin; 

bin bin; 

These sont les sortes de messages d'erreur que vous pourriez obtenir.

+0

Je n'ai pas une telle déclaration dans les bacs. J'ai également veillé à commenter chaque autre section du code avant d'essayer de compiler. – Pax