Quantcast
Viewing all articles
Browse latest Browse all 22162

C/C++ ISO compliant casting void ptr to multidimensional arrays

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);      }}

Viewing all articles
Browse latest Browse all 22162

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>