Clear Filters
Clear Filters

codegen convert C++ does not take 2 or 3 arguments error

5 views (last 30 days)
I generate C++ code completed via matlab coder but encounter error below.
I example matlab coder makes function below
void w**(double ***, double ***, coder::array<double, 1U> &w)
What is "coder::array<double, 1U> &w"?
Why there are arguments one more?
w** function have 2 argument before.
and How I get return value from void function?
[error messages]
Severity Code Description
Error C1010 unexpected end of file while looking for precompiled header. Did you forget to add '#include "stdafx.h"' to your source?
Error C2660 'w**': function does not take 2 arguments
Error C2660 'w****': function does not take 3 arguments
Error C2660 'w****': function does not take 2 arguments
  1 Comment
Walter Roberson
Walter Roberson on 14 Sep 2023
My speculation is that the final argument would be the location to assign the output result to.

Sign in to comment.

Accepted Answer

Matan Silver
Matan Silver on 14 Sep 2023
Hello,
Walter is correct: If you are generating code for a MATLAB function with an output, there are some scenarios in which that will become a "pass by reference" argument that represents the output of the function.
For struct arguments (which it does not look like applies in this case), you can use the PassStructByReference config parameter to influence this behavior for both entrypoint inputs and outputs: https://www.mathworks.com/help/coder/ug/pass-structure-arguments-by-reference-or-value.html#PassStructureArgumentsByReferenceOrByValueExample-5.
The "coder::array" means that particular input (or output) is a dynamically allocated array. To see more information about how to use "coder::array", you can see this doc page:
The page above also contains an example showing how you can pass a result argument by reference to store the output of the entrypoint.
There are a number of things you can do to influence the generation of dynamically allocated arrays. You could generate C instead of C++, in which case we will generate "emxArray"-style variable sized arrays: https://www.mathworks.com/help/coder/ug/use-c-arrays-in-the-generated-function-interfaces.html. You can also generate "coder::array"-style dynamically allocated arrays with C++ using the DynamicMemoryAllocationInterface parameter on the config: https://www.mathworks.com/help/coder/ref/coder.codeconfig.html#mw_3fc64d5b-5aa4-4a11-bf6b-10e138b71948. Other factors like whether the array is fixed or variable sized, if it has an upper bound on the size, etc., can change the representation of the array in generated code.
Feel free to reply if you have any further questions!
Matan

More Answers (0)

Categories

Find more on Generating Code in Help Center and File Exchange

Products


Release

R2023a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!