Question

Je travaillais sur un programme dans Netbeans sur Linux en utilisant un compilateur gcc lorsque, lors de la commutation à Visual C ++ sous Windows 7, le code n'a pas réussi à compiler comme Visual C ++ dit expected constant expression sur plusieurs lignes. Sur Netbeans, j'ai simplement fait quelque chose de similaire à char name[fullName.size()];, tandis que sur Visual C ++, j'ai essayé, entre autres,

const int position = fullName.size();
char Name[position];

Comment puis-je créer une constante à utiliser pour le tableau?

Note: Je sais cette question, mais est-il possible que je peux obtenir ce travailler sans utiliser des vecteurs, car cela nécessiterait une réécriture de nombreuses parties du programme?

Était-ce utile?

La solution

Dans VC ++, vous ne pouvez pas faire des déclarations d'exécution de la taille des tableaux de la pile, mais vous pouvez faire l'allocation de la pile via _ alloca

ceci:

const int position = fullName.size();
char Name[position];

devient ceci:

const int position = fullName.size();
char * Name = (char*)_alloca(position * sizeof(char));

Il est pas tout à fait la même chose, mais il est aussi proche que vous allez obtenir dans VC ++.

Autres conseils

Ceci est impossible dans VC ++. Je sais, assez triste: (

Les solutions comprennent:

  • Créer sur le tas
  • Faites constante

La nouvelle norme C ++ (C ++ 0x) propose une fonction 'expression constante' pour faire face à cela. Pour plus d'informations, consultez cette sur.

C ++ exige que la taille du tableau est connu au moment de la compilation. Si vous ne me dérange pas en utilisant une extension non standard, gcc ne permet le code comme vous faites (notez que si ce n'est pas la norme C ++, il est standard C, au C99).

Je suppose aussi que vous pouvez utiliser un vecteur (dans ce lieu particulier) avec moins de peine que vous croyez bien - un peu de code qui est écrit pour un tableau peut fonctionner avec un vecteur avec seulement le recompiler , et peu de réécriture ou pas du tout.

Votre char name[fullName.size()]; est un exemple d'un tableau de longueur variable qui - dans la mesure que je sache - ne sont pas standardisés en C ++ si vous êtes à la merci du compilateur. [Un peu hors-sujet, ils font partie de la norme C99]

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top