I have a function in C++ that looks like:
//ellipsis are irrelevant variables. Not variadic
lint 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.
EDIT for some reason this did not produce any errors:
typedef long long int lint;
typedef struct min_and_max
{
lint min;
lint max;
}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
//looped logic for solving the max/min value for an expression problem
arr[i][j].max = find_max(arr, i, j, nums, ops);
}
Please login or Register to submit your answer