Problema com C++ (Arrays)
Declarei da seguinte forma na função main()
#include <iostream>
using namespace std;
int main()
{
int max_elements = 10;
int arr[max_elements];
...
acontece que apartir desse arr[max_elements] que seria o array, ele diz que precisa de uma função constante (1,2,3,4... 586)
realmente isso deveria acontecer?
Vou tentar explicar o melhor que eu puder, se prepara que a resposta é grandinha
O problema que ocorreu é que você está tentando alocar estaticamente um vetor de tamanho variável. Quando você declara um vetor, a memória que ele irá utilizar é alocada em tempo de compilação, ou seja, enquanto o compilador está construindo o seu código, ele já reserva uma porção de memória para o seu vetor. Isso é conhecido como alocação estática.
O que você está tentando fazer é declarar um vetor sem definir qual será o seu tamanho. Apesar de você ter declarado a variável max_elements e ter definido um valor para ela, lembre-se que ela é uma VARIÁVEL, ou seja, o compilador não sabe qual valor ela possui durante a compilação porque esse pode VARIAR durante a execução. Imagine o seguinte, depois que você declarou o vetor usando o valor de max_elements como seu tamanho, o que irá acontecer se em algum momento você definir o valor dessa variável para 20? O compilador simplesmente não poderá entender isso porque o valor mudou depois que o código já foi compilado, ou seja, em tempo de execução.
Existem três formas de resolver isso:
1) definir o tamanho do array na própria declaração do mesmo:
2) definir a variável max_elements como constante (que é o que o compilador está pedindo para você fazer):
Código:
int const max_elements = 10;
int arr[max_elements]
Note que agora a variável max_elements é uma CONSTANTE, ou seja, o seu valor não pode ser mudado em tempo de execução.
3) usando alocação dinâmica. Isso é um pouco mais complicado e acho que já escrevi demais. Se quiser eu posso postar novamente explicando o que o código abaixo faz:
Código:
int max_elements = 10;
int *arr = (int*) calloc(max_elements, sizeof(int));
Com isso o seu vetor pode ter o tamanho que você quiser, quando você quiser.