I have a function in C++ that looks like:
//ellipsis are irrelevant variables. Not variadiclint find_max(const void* ptr, ... , const vector<lint> &nums, ...){ const mm (*arr)[nums.size()] = (const mm (*)[nums.size()]) ptr; //or const mm (*arr1)[nums.size()] = reinterpret_cast<const mm (*)[nums.size()]> (ptr);}
The two casts produce an error with little detail as to why.
error: cannot convert ‘const mm (*)[(<anonymous> + 1)]’ {aka ‘const min_and_max (*)[(<anonymous> + 1)]’} to ‘const mm (*)[(<anonymous> + 1)]’ {aka ‘const min_and_max (*)[(<anonymous> + 1)]’} in initialization 42 | const mm (*arr)[nums.size()] = (const mm(*)[nums.size()])ptr; | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | const mm (*)[(<anonymous> + 1)] {aka const min_and_max (*)[(<anonymous> + 1)]}
If I am not mistaken, both lvalue type and the corresponding cast is similar. For future reference, should I have more than 2 dimensions, how can I add them? I'm still an amateur in pointer manipulation so this will help alot.
EDITthis does not produce any errors in g++:
typedef long long int lint;lint pInf = ~((unsigned long long int)0) >> 1;lint nInf = ~pInf;typedef struct min_and_max{ lint min{pInf}; lint max{nInf};}mm;const lint find_max(const void* ptr, int i, int j, const vector<lint> &nums, const vector<char> &ops){ const int dim = nums.size(); const mm (*arr)[dim] = reinterpret_cast<const mm (*)[dim]> (ptr); //algorithm which I haven't figured out yet. some_lint_value = arr[i][j].max + arr[i-232414][j+46846].min; return some_lint_value;}void caller(vector<lint> &nums, vector<char> &ops){ mm arr[ops.size()][nums.size()]; //ISO variable size forbid warn for (int i = 1; i <= ops.size(); i++) { for (int j = 1; j <= nums.size(); j++) //looped logic for solving the max/min value for an expression problem arr[i][j].max = find_max(arr, i, j, nums, ops); }}