Ir para conteúdo
Fórum Script Brasil
  • 0

C++ Matriz


AleJF

Pergunta

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

  • 0

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ê quer

cout << "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 normal

p[0] = 100;

cout << p[0] << endl;

//liberar

delet[] 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ória

FUI!

Editado por vangodp
Link para o comentário
Compartilhar em outros sites

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.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...