2009-12-11 7 views
3

Est-il possible d'avoir un vecteur car une variable globale est C++? Comme ceci:vecteur global C++

class system {...}; 
vector<system> systems; 

lorsque je tente de compiler ce que j'obtiens une erreur. Le compilateur que j'utilise est gcc et je compile en C++.

+10

Quel est le message d'erreur que vous obtenez? – Trent

+4

Le vecteur peut être globalement. Bien que je ne recommanderais pas de le faire sans raison forte. Quelle est l'erreur? –

+3

s'il vous plaît. donner . nous. la . Erreur . message – KeatsPeeks

Répondre

3

Lorsque je compile votre code avec g ++ 3.4.4 sous Cygwin-je obtenir les erreurs suivantes:

test.cpp:8: error: type/value mismatch at argument 1 in template parameter list for `template class std::vector'

test.cpp:8: error: expected a type, got `system'

test.cpp:8: error: template argument 2 is invalid

test.cpp:8: error: invalid type in declaration before ';' token

Le problème est votre système de nom de classe, soit changer le nom de la classe ou de l'utilisation:

vector<class system> systems

+0

comment l'ajout de classe aide-t-il? –

+0

supprimer l'en-tête et vérifier à nouveau. –

+0

Le seul en-tête inclus était . – Trent

9

Oui qui peut comme ceci:

#include <vector> 

class system{ ... }; 

std::vector<system> systems; 

Donc le vecteur global var est défini après la définition du système de classe. Le vecteur doit être inclus et ne pas oublier le vecteur std :: before (ou l'espace de noms std).

Editer: J'ai juste pensé à quelque chose. Il y a aussi une fonction appelée système. Essayez un nom de classe différent.

+0

Si vous essayez de compiler ce code avec gcc vous obtenez une erreur. Voir ma réponse à propos du nom de classe étant "système". – Trent

+0

Il compile pour moi en utilisant g ++ 4.4.1 (après avoir enlevé le ...). "system" n'est pas un mot réservé en C++, si c'est ce à quoi vous pensez. –

+0

@Neil, je teste avec g ++ 3.4.4 sous Cygwin. Je sais que system n'est pas un mot-clé réservé, mais pour une raison quelconque, g ++ donnait une erreur. – Trent

0

Voulez-vous dire ceci:

#include<iostream> 
#include<vector> 
using namespace std; 
class system{ 
    // class members 
}; 

vector<system> v; 

int main() 
{ 
    //do something 
} 

Il fonctionne très bien dans mon compilateur g ++. Je ne pense pas qu'il devrait y avoir de problème pour définir une variable vectorielle globalement, mais ce n'est pas recommandé.

+0

Cela ne compile pas dans mon compilateur g ++ sous cygwin. Le problème est avec le nom de la classe «système». Vois ma réponse. – Trent

+0

Il n'y a pas de problème avec 'système' ici. Je pense que vous pourriez avoir inclus l'en-tête et c'est pourquoi le problème. –

1

Je parie que vous avez déclaré dans un fichier d'en-tête sans extern

+0

Une explication pour le downvote? –

+0

Je n'ai pas voté pour vous. Je dois dire que c'était une supposition valable sans l'erreur elle-même. Aucune idée pourquoi quelqu'un serait downvote à cause de cela –

7

system() est une fonction c-stdlib, donc peut-être un nom déjà défini, vous ne pouvez pas réutiliser. Renommez-le à autre chose (système?) Et publiez le message d'erreur complet la prochaine fois, plz.

+0

étant un nom de fonction de bibliothèque standard ne fait pas un nom réservé. S'il n'a pas inclus , il ne devrait pas voir "système" dans la table des symboles. Cela semble être un problème avec au moins certaines versions de g ++. Changer le nom de classe aide dans ce cas - voir ma réponse. – Trent

+0

même si cela est vrai, l'erreur se produit uniquement si vous incluez, en quelque sorte, windows.h !!!! – PierreBdR

+0

droite .. réservé est mauvais libellé de ma part .. Je l'ai mis à jour. – Macke

0

L'erreur est, comme souvent, dans windows.h! "system" est défini dans "windows.h" ou quelque chose qui y est inclus. Je suppose que c'est la fonction de faire un appel système.