AleJF Postado Agosto 8, 2015 Denunciar Share Postado Agosto 8, 2015 Pessoal, sou iniciante em c++ e meu problema é o seguinte, o console pede ao usuário para inserir um valor int que sera a dimensão da matriz.struct Estado{ int numero; string nome; int einicial; int efinal; int recebe1; int recebe2;};int main () { cout << "entre com o valor: " << endl; int num; cin >> num; Estado atual[num]; // o problema é nessa linha } Eu estou usando a IDE Visual Studio 2013, ai não compila e ela mostra a declaração da matriz como o problema. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 vangodp Postado Agosto 8, 2015 Denunciar Share Postado Agosto 8, 2015 (editado) você esta perguntando por matriz porem seu exemplo se trata de vetor ou array. Vou me guiar pelo seu exemplo e não pelo nome do post.Essa forma de reservar memória não esta definida no padrão C++, é uma forma incorreta que si bem pode funcionar, também pode falhar, alguns compiladores podem aceitar isso, e outros simplesmente podem mostrar um erro. A forma correta é tipo nome[elementos]; porem elementos deve ser um numero constante e não variável. O A matriz funciona de igual forma, ambas tomam o tamanho em tempo de compilação(antes de que se executa o programa) e por isso isso que você quer fazer é desaconselhável. O que você esta buscando é dar o tamanho para a matriz em tempo de execução do programa, para isso existe o que se denomina "alocação dinâmica memória", aparte de muitos outros mecanismos que nos proporciona C++ como os continers(std::map, std::array etc etc). Vamos com um exemplo para arrays:int *p; //primeiro criamos um ponteiro//pedimos o numero de elementos como você quercout << "entre com o valor: " << endl; int num;cin >> num;//reservamos a memória dinamicamente em C++p = new int [num];Desde aqui p es um array normal e corrente com uma condição. Devemos antes de sair do programa usar delet para liberar memória, pois a diferencia de um simples array essa não se libera sozinha. vamos a ver como seria para usar e liberar esse array.//uso normalp[0] = 100;cout << p[0] << endl;//liberardelet[] p;return 0;Para estar mais seguro vamos com seu exemplo: #include <iostream> using namespace std; struct Estado { int numero; string nome; int einicial; int efinal; int recebe1; int recebe2; }; int main () { cout << "entre com o valor: " << endl; int num; cin >> num; //supondo que num escolhemos 10 ;)... Estado *atual; atual = new Estado[num]; //se criam 10 objetos o primeiro é atual[0], e o ultimo é atual[9]. //uma forma de aceder ao estado é: atual[3].nome = "paulo"; cout << atual[3].nome << endl; delete[] atual; //Importante liberar!! return 0; }Então recordando sempre de eliminar essa matriz com delete[] que é muito importante valeu? Essa é a forma correta, si quiser continuar por sua via você é livre, porem corrigir os maus hábitos te tornará melhor programador e te pode evitar muitos dores de cabeça e fazer que que você se destaque mais como programador. ;) Esqueci de por alguma referencia, aqui deixo: https://pt.wikibooks.org/wiki/Programar_em_C%2B%2B/Alocação_dinâmica_de_memóriaFUI! Editado Agosto 8, 2015 por vangodp Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
AleJF
Pessoal, sou iniciante em c++ e meu problema é o seguinte, o console pede ao usuário para inserir um valor int que sera a dimensão da matriz.
struct Estado
{
int numero;
string nome;
int einicial;
int efinal;
int recebe1;
int recebe2;
};
int main () {
cout << "entre com o valor: " << endl;
int num;
cin >> num;
Estado atual[num]; // o problema é nessa linha
}
Eu estou usando a IDE Visual Studio 2013, ai não compila e ela mostra a declaração da matriz como o problema.
Link para o comentário
Compartilhar em outros sites
1 resposta a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.