S-Function return types
1 回表示 (過去 30 日間)
古いコメントを表示
Hello,
I am trying to generate an S-Function code from a C++ source code in which I wish both input and output to be arrays.
In my C++ code the function follows:
double* function(double param1[], param2[])
{
double *varReturn = new double[sizeof(param1[])];
...
//body
...
return varReturn;
}
In the Matlab environment I enter the Output definition:
def.OutputFcnSpec = 'double y1 = TPh(double u1[], double u2[])'; then I get the
error:
error C2440: '=' : cannot convert from 'double *' to 'real_T',
logically due to "double y1" does not be an array nor a pointer declaration. However I am having a hard time in write the output definition to make it work.
Can someone please give me some help with this. I sense I am being careless at some details or I have a misunderstanding.
Thank you.
Sincerely,
Dan
1 件のコメント
José-Luis
2012 年 8 月 16 日
編集済み: José-Luis
2012 年 8 月 16 日
in C++, if you have a pointer to some data and then you set the value of the data inside the function, you can access it outside the function. If you define the pointer inside the function, as you seem to be doing, then the return values will be undefined once the function exits. This might be the source of the problem.
採用された回答
Kaustubha Govind
2012 年 8 月 16 日
The compiler error occurs, because in your specification:
double y1 = TPh(double u1[], double u2[])
The output 'y1' is returned by value, not a pointer which your function returns. As José-Luis Guerrero suggested, you should probably return the output via an input pointer argument, so that your specification can be:
TPh(double u1[], double u2[], double y1[])
9 件のコメント
Kaustubha Govind
2012 年 8 月 17 日
Daniel: Simulink already allocates the memory for the output, so you shouldn't be allocating it again. In fact, you might see memory leaks and other bad things happen if you overwrite the pointer (y1) allocated by Simulink to a different location.
その他の回答 (0 件)
参考
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!