2010-11-29 11 views
2

Question muette. mais pouvez-vous faire cela. (ce sont des variables globales par la voie)Taille de tableau non définie? C++

int size; 
double Values[size]; 

Si Im obtenir la taille dans un fichier?

Je sais que vous ne pouvez probablement pas, mais peut-être leur façon de réajuster la taille en fonction du nombre lu dans le fichier (comme dire que je lis dans 7, je sais que les valeurs devront être de taille 7) .

Le compilateur se plaint, mais je me demande si leur solution de contournement. (Ceux-ci doivent rester en tant que variables globales BTW

+0

Doivent-ils être globaux? – helpermethod

+1

@Helper: Rien n'a jamais * besoin * d'être global. Eh bien, "rien n'est jamais" est un peu fort, mais vous obtenez mon point. –

+0

@John C'était plus d'une question ironique. Malheureusement, il est difficile d'intégrer l'ironie sous forme textuelle :-). – helpermethod

Répondre

6

Non, vous ne pouvez spécifier la taille des tableaux comme celui-ci à l'aide. expressions constantes entières. Signification connues à la compilation.

vous ne devriez probablement pas faire cela, de toute façon. au lieu de cela, vous devez utiliser un vecteur.

Si, pour une raison quelconque, vous ne pouvez pas utiliser un vecteur (ce dont je doute sérieusement), votre prochaine option consisterait à utiliser des tableaux alloués dynamiquement. Mais s'il vous plaît, pour l'amour de tout ce qui est bon dans le monde, utilisez un pointeur intelligent si vous faites cela.

+1

Vous pouvez également utiliser l'alloca() non standard mais apparemment extrêmement commun pour les tableaux dynamiques basés sur des piles. – Puppy

+0

Ya j'allais utiliser un vecteur .... mais pour une raison quelconque, je ne peux pas trouver pour le monde de moi comment lire une seule ligne dans un vecteur. Quand je sais combien de temps le vecteur doit être (après avoir lu dans la première valeur) –

+1

@Mercfh: Poster une question séparée à ce sujet. J'estime que vous obtenez une réponse dans les 42 secondes. Peut-être même de moi. –

2

Vous pouvez le faire si vous allouez dynamiquement.

double *Values = new double[size]; 
... 

delete [] Values; 

mais pas statiquement

+0

Comment .... est-ce que j'irais faire ça? Les allouer dynamiquement. Comme disons je dis Taille = 10, puis-je juste changer la taille plus tard dans le programme après avoir lu le numéro dans le fichier –

+0

Désolé, j'ai raté le bit sur les variables globales. Ne faites pas le 'new' où vous déclarez des valeurs (donc' double * Values; '), puis placez-le partout où vous lisez la taille du fichier (c'est-à-dire' Values ​​= new double [taille]; '). –

3

Vous pouvez, en fait :)

C99 permet. MSVC ne prend pas en charge C99, GCC le fait.

C++ compilateurs ont également tendance à permettre que comme une extension (vous répondre si vous êtes OK avec selon les extensions du compilateur). La seule exigence est que vous devez savoir size au moment de la déclaration de Values.

A std::vector est généralement mieux (et plus sûr et fixées de manière homogène et ainsi de suite) de toute façon, à moins que vous vraiment vraiment voulez que les données sur la pile.

+1

Est-ce que C99 supporte réellement les tableaux ** global ** à longueur variable? – fredoverflow

+0

J'ai mentionné 'size' être connu au moment de la déclaration, donc pour les tableaux globaux, il serait réduit à" connu au moment de la compilation ", à moins que j'ai quelque chose de mal ici? – Kos