arrays - Read in value of const int when ran - C++ -
i have program defines const int
value size of arrays. there anyway can change value of var when program first ran? need set once @ start cannot program compile when trying set using cin
i'm getting error stating that:
error: array bound not integer constant before ‘]’ token
which understand mean there no value set array size cannot compile. have tried initializing var want set 1
, change once program being ran i'm having no luck either, getting same error.
edit: first 2 lines new var
, new const int
i'm looking change , below lines errors seems originating from.
int objectindexsize; const int numofobjects = objectindexsize; mat imagearray[numofobjects]; mat descriptorsarray[numofobjects]; vector<keypoint> keypointarray[numofobjects]; string objectname[numofobjects]; string filenamepostcut[numofobjects];
variables such as
int arr[10];
are embedded in executable under .data
section. have 40 bytes of zeros. these 40 bytes there when load executable image (.code
, .data
, others) ram. there won't need allocate anything, since done os.
(not sure if case big chunks of memory, since memory can fragmented, , executable image shouldn't. perhaps compiler magic behind scenes.)
anyway, reason why can't do
int n = 10; int arr[n];
but can do
const int n = 10; int arr[n];
is because in first case compiler doesn't know n
constant (it might figure out optimization, idea), , in second case never change, meaning compiler knows how memory pre-allocate in executable you.
now, can't const int a; std::cin >> a;
because that's not constant @ all.
what can use either:
int n; std::cin >> n; std::unique_ptr<int[]> arr(new int[n]); //c++11 //or int *arr = new int[n]; //before c++11
or use vector , tell reserve memory you're going need this:
int n; std::cin >> n; std::vector<int> arr; arr.reserve(n);
if know size won't change, might want use pointers instead of vectors.
Comments
Post a Comment