Logo Hardware.com.br
cecmello
cecmello Novo Membro Registrado
2 Mensagens 0 Curtidas

Dúvida C++ - Problema Visual Studio

#1 Por cecmello 19/05/2014 - 22:43
Olá boa noite, sou novo no fórum e estou começando aprender C++, minha dúvida é a seguinte, eu criei um programa no Dev C++ onde ele compilava e executava tranquilamente, porém devido as ferrramentas debugging do Visual Studio serem muito mais aprimoradas resolvi tentar programar nele, pois facilitaria para descobrir os erros.
Então é o seguinte, um programa que rodava do Dev C++, com o mesmo código não funciona no Visual Studio, o problema é quando estou tentando criar arrays, por exemplo: Eu tenho uma matriz que será criada conforme o número de linhas e colunas que o usuário digitar, então, por exemplo:

int linhas = 5; //Apenas um exemplo
int colunas = 7;

double matriz[linhas][colunas];

O Visual Studio retorna esse erro:
error C2057: expected constant expression

Ele diz que as variáveis linhas e colunas devem ser constantes, mas já tentei várias soluções e nada faz eu compilar o programa e, enquanto isso, no Dev C++ o programa compila tranquilamente, sem nenhum problema.

Obrigado, aguardo respostas.
Fergo
Fergo Highlander Registrado
9.3K Mensagens 1.1K Curtidas
#2 Por Fergo
19/05/2014 - 23:45
Olá!

Primeiramente, talvez caiba esclarecer que tanto o DevC++, que usa uma implementação do GCC como compilador, quanto o Visual Studio são capazes de compilar códigos escritos em C e também em C++. Essa informação é importante pois dependendo de qual das linguagens o compilador está considerando na hora de compilar seu código (uma vez que o mesmo é "válido" tanto para C quanto para C++), você pode ter diferentes resultados.

Sua pergunta na verdade tem duas respostas:

1) Se está compilando para C++

Sua implementação não funciona pois a linguagem não permite declaração de arrays/vetores com dimensões variáveis (dinâmicos) dessa forma. Funcionaria se você declarasse como:

[php]
double matriz[10][8]; //ou qualquer constante para a dimensão
[/php]Para criar vetores dinâmicos em C++, pesquise sobre o operador "new". Veja o exemplo:
http://stackoverflow.com/questions/936687/how-do-i-declare-a-2d-array-in-c-using-new

Outra alternativa é usar o std::vector:
http://www.cplusplus.com/reference/vector/vector/

2) Se está compilando para C

Acredito que esse era seu caso no DevC++.

A sua implementação funciona no DevC++ pois ele usa um compilador C baseado no padrão C99, o qual permite os chamados "Variable Length Arrays" (VLA), que é basicamente isso que você programou. No entanto, o compilador C do Visual Studio segue o padrão C90, onde não existe a especificação do VLA, portanto seu código não vai compilar.

Assim como no caso do C++ que eu expliquei acima, você pode adotar outra estratégia para criar seu vetor bidimensional dinâmico usando a função "malloc()":
http://www.cs.swarthmore.edu/~newhall/unixhelp/C_arrays.html#dynamic2D
Site pessoal www.fergonez.net
Portfolio
www.fbirck.com
Artigos
Informática
cecmello
cecmello Novo Membro Registrado
2 Mensagens 0 Curtidas
#3 Por cecmello
20/05/2014 - 00:56
Olá Fergo, muito obrigado pela resposta, andei pesquisando sobre os VLA e acredito que seja por isso que o Visual Studio não compila o código. Só para esclarecer eu estava programando em C++, e após fazer alocação dinâmica utilizando o primeiro link que você me enviou, funcionou muito bem, muito obrigado.

Tópico resolvido, como faço para trancá-lo?
© 1999-2025 Hardware.com.br. Todos os direitos reservados.
Imagem do Modal