Pergunta

Eu estava trabalhando em um programa no NetBeans no Linux usando um compilador GCC quando, ao alternar para o visual c ++ no Windows 7, o código falhou em compilar como o visual c ++ diz isso expected constant expression em várias linhas. Em netbeans, eu simplesmente fiz algo semelhante a char name[fullName.size()];, enquanto no Visual C ++, eu tentei, entre outras coisas,

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

Como posso criar uma constante para usar para a matriz?

Nota: Eu sei sobre essa questão, mas existe alguma maneira de fazer isso funcionar sem usar vetores, pois isso exigiria uma reescrita de muitas partes do programa?

Foi útil?

Solução

No VC ++, você não pode fazer declarações de tempo de execução de tamanhos de matriz de pilha, mas você pode fazer alocação de empilhamento via _Aloca

então, é isso:

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

torna -se o seguinte:

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

Não é exatamente a mesma coisa, mas é o mais próximo que você entrará no VC ++.

Outras dicas

Isso não é possível no VC ++. Eu sei, muito triste :(

As soluções incluem:

  • Crie -o na pilha
  • Torne -o constante

O novo padrão C ++ (C ++ 0x) propõe um recurso 'Expressão constante' para lidar com isso. Para mais informações, verifique isto Fora.

C ++ exige que o tamanho da matriz seja conhecido no momento da compilação. Se você não se importa de usar uma extensão fora do padrão, o GCC permite código como você está fazendo (observe que, embora não seja padrão C ++, ele é padrão em c, a partir de C99).

Eu também acho que você poderia usar um vetor (nesse lugar em particular) com menos problemas do que você acredita-um pouco de código escrito para uma matriz pode funcionar com um vetor com apenas um recompile e pouco ou nenhuma reescrita.

Sua char name[fullName.size()]; é um exemplo de um matriz de comprimento variável que - até onde eu sei - não são padronizados em C ++, então você está à mercê do compilador. [Ligeiramente fora do tópico, eles fazem parte do padrão C99

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top