Pregunta

Yo estaba trabajando en un programa en Netbeans en Linux utilizando un compilador gcc cuando, al cambiar a Visual C ++ en Windows 7, el código no pudo compilar como Visual C ++ dice que expected constant expression en varias líneas. En Netbeans, simplemente hice algo similar a char name[fullName.size()];, mientras que en Visual C ++, he intentado, entre otras cosas,

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

¿Cómo puedo crear una constante que se utilizará para la matriz?

Nota: lo que sé sobre esta pregunta , pero ¿hay alguna manera de conseguir este trabajar sin el uso de vectores, ya que eso requeriría una re-escritura de muchas partes del programa?

¿Fue útil?

Solución

En VC ++ no se puede hacer declaraciones en tiempo de ejecución de tamaños de matriz de pila, pero se puede hacer a través de la asignación de pila _ alloca

por lo siguiente:

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

se convierte en la siguiente:

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

No es exactamente lo mismo, pero es lo más cerca que se van a poner en VC ++.

Otros consejos

Esto no es posible en VC ++. Yo sé, bastante triste: (

Las soluciones incluyen:

  • Cree que en el montón
  • Que sea constante

El nuevo estándar de C ++ (C ++ 0x) propone una función de 'expresión de la constante' para hacer frente a esto. Para obtener más información, consulta este a cabo.

C ++ requiere que el tamaño de la matriz ser conocido en tiempo de compilación. Si no les importa usar una extensión no estándar, gcc sí permite código como el que está haciendo (tenga en cuenta que, si bien no es estándar de C ++, que es estándar en C, a partir de C99).

También me supongo que se podría usar un vector (en este lugar en particular) con menos problemas de lo que cree, aunque - un poco de código que está escrito para una matriz puede trabajar con un vector con sólo una recompilación y poco o nada de volver a escribir en absoluto.

Su char name[fullName.size()]; es un ejemplo de un de longitud variable de matriz que - en la medida de que yo sepa - no están estandarizados en C ++ por lo que está a merced del compilador. [Un poco fuera del tema que son parte de la norma C99]

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top