Domanda

stavo lavorando su un programma in Netbeans su Linux usando un compilatore gcc quando, al passaggio a Visual C ++ su Windows 7, il codice non è riuscito a compilare come Visual C ++ dice expected constant expression su diverse linee. Su Netbeans, ho semplicemente fatto qualcosa di simile a char name[fullName.size()];, mentre su Visual C ++, ho cercato, tra le altre cose,

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

Come posso creare una costante da utilizzare per l'array?

Nota: so di questa domanda , ma c'è un modo per ottenere questo di lavoro senza utilizzare vettori, dal momento che richiederebbe una ri-scrittura di molte parti del programma?

È stato utile?

Soluzione

In VC ++ non si può fare dichiarazioni di runtime di dimensioni pila di allineamenti, ma si può fare di allocazione dello stack tramite _ alloca

quindi questo:

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

diventa questo:

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

Non è proprio la stessa cosa, ma è il più vicino si sta per entrare in VC ++.

Altri suggerimenti

Questo non è possibile in VC ++. Lo so, abbastanza triste: (

Le soluzioni comprendono:

  • Crea sul mucchio
  • Fai la costante

Il nuovo standard C ++ (C ++ 0x) propone una funzione di 'un'espressione costante' a che fare con questo. Per maggiori informazioni, consultare questo fuori.

C ++ richiede che la dimensione della matrice essere noto al momento della compilazione. Se non ti dispiace utilizzando un'estensione non standard, gcc non consente il codice come si sta facendo (da notare che mentre non è di serie C ++, è è di serie in C, come di C99).

Mi piacerebbe anche Immagino che si potrebbe usare un vettore (in questo particolare posto), con meno problemi di quanto si creda però - un po 'di codice che è scritto per un array può lavorare con un vettore con solo un ri-compilazione , e poca o nessuna riscrittura a tutti.

Il char name[fullName.size()]; è un esempio di un matrice di lunghezza variabile che - fino che ne so - non sono standardizzati in C ++ in modo da essere in balia del compilatore. [Un po 'off-topic che sono parte dello standard C99]

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top