2010-07-26 7 views
1

Je suis coincé! J'ai ce code de test très simple et je ne peux pas le compiler! J'ai utilisé le même code plusieurs fois auparavant mais maintenant ça ne marchera pas!
J'ai ce programme simpleerreur de compilation avec le vecteur en C++

#include <vector> 
#include <iostream> 
#include "Rswap.h" 
using namespace std; 
int main(){ 
Rswap test(); 
    cin.get(); 
return 0;} 

Et puis le rswap.cpp ...

#include <vector> 
#include "Rswap.h" 
Rswap::Rswap(){ 
    V.push_back(9); 
}; 

Et puis le rswap.h ...

#ifndef Rswap_h 
#define Rswap_h 


class Rswap{ 
public: 
    vector<int>V; 
    Rswap(); 
}; 
    #endif 

J'utilise Visual studio 2008. Y at-il quelque chose qui cloche qui est évident et que je suis absent ou que pourrait-il être! Comme je l'ai dit j'ai utilisé cet extrait sur plusieurs occasions différentes et je ne peux pas trouver de différence entre cela et ceux qui fonctionnent ... Et j'ai essayé les deux vector <int> V; et vector <int> V; sans aucune chance

Je l'ai regardé fixement aveuglément depuis un moment alors j'ai pensé qu'il est préférable de demander ici!

rswap.h(7) : error C2143: syntax error : missing ';' before '<' 
    rswap.h(7) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 
    rswap.h(7) : error C2238: unexpected token(s) preceding ';' 
+0

Question rapide - essayé 'vecteur V'? (Espace entre ">" et "V".) – Stephen

+0

Cela ne résoudra probablement pas votre problème, mais il est préférable d'inclure le '#include ' dans le fichier rswap.h, là où vous en avez besoin - forcer tous les clients de rswap de savoir faire est impoli, et peut-être impraticable. –

+0

Sans rapport avec votre problème, mais notez que 'Rswap test();' déclare une * fonction * renvoyant un objet 'Rswap'. Pour déclarer un objet 'Rswap', utilisez' Rswap test; '(pas de parenthèses). – Philipp

Répondre

4

Au point que vous #include "Rswap.h", vous n'avez pas déclaré using namespace std; encore, de sorte que la référence à vector en Rswap.h doit être qualifié avec un espace de noms. Déclarez simplement le vecteur avec un préfixe d'espace de nommage.

class Rswap{ 
public: 
    std::vector<int>V; 
    Rswap(); 
}; 

De plus, je vous suggère plutôt #include <vector> de Rswap.h que de compter sur celui qui utilise Rswap.h pour obtenir le bon ordre #include.

+0

Cela résout le problème Mais je sais que je l'ai fait sans le préfixe std ::! –

+0

Et c'est parce que j'ai déclaré l'espace de noms std avant cela dans les versions antérieures, tout comme vous l'avez dit! Merci ... je nouveau c'était quelque chose de simple! –

+3

Pour être clair, les fichiers d'en-tête ne devraient jamais avoir de déclaration d'espace de noms, et ils ne devraient probablement pas être inclus après les déclarations d'espace de noms. –

0

Ah, votre using namespace std vient trop tard - il doit être inséré AVANT le rswap.h. Dans tous les cas, il vaut mieux écrire std :: vector à la place.

+0

Yep !, c'est tout! –

1

Il devrait être

std::vector<int>V; 
0

Vous devez #inclure <vecteur> dans rswap.h.