У меня есть следующий код C ++
returnPolygon.h
:
struct returnPolygon
{
double *x;
double *y;
returnPolygon(double *in1, double *in2);
};
returnPolygon.cpp
:
#include "returnPolygon.h"
returnPolygon::returnPolygon(double *in1, double *in2) {
this->x = in1;
this->y = in2;
}
main.cpp
:
#include "returnPolygon.h"
#include <iostream>
using namespace std;
int main()
{
double xarr[5] = { 1,2,3,4,5 };
double yarr[5] = { 21,22,23,24,25 };
returnPolygon rp = returnPolygon(xarr, yarr);
std::cout << "x: " << std::endl;
for (int i = 0; i < 5; i++) {
std::cout << rp.x[i] << std::endl;
}
std::cout << "y: " << std::endl;
for (int i = 0; i < 5; i++) {
std::cout << rp.y[i] << std::endl;
}
return 0;
}
Когда я запускаю приведенный выше код в Visual Studio, он компилируется без ошибок и правильно отображает значения.Но когда я пытаюсь использовать код Matlab
function S = callReturnPolygon1 %#codegen
S=struct('x',{0},'y',{0} );
if coder.target('MATLAB')
else
coder.updateBuildInfo('addSourceFiles','returnPolygon.cpp');
coder.cinclude('returnPolygon.h');
S = coder.ceval('returnPolygon', [1,2,3], [4,5,6]);
sprintf('sum: %s', char(num2ascii(S.x,1)))
end
end
и codegen -config:lib callReturnPolygon1 -report
, я получаю сообщение об ошибке
C:\me\returnPolygon.h(6): error C2061: syntax error: identifier 'returnPolygon'
C:\me\returnPolygon.h(7): error C2059: syntax error: '}'
C:\me\codegen\lib\CALLRE~1\callReturnPolygon1.c(147): warning C4013: 'returnPolygon' undefined; assuming extern returning int
C:\me\codegen\lib\CALLRE~1\callReturnPolygon1.c(147): error C2440: '=': cannot convert from 'int' to 'struct0_T'
NMAKE : fatal error U1077: '"C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\bin\HostX64\x64\cl.EXE"' : return code '0x2'
Stop.
The make command returned an error of 2
'An_error_occurred_during_the_call_to_make' is not recognized as an internal or external command,
operable program or batch file.
Error(s) encountered while building "callReturnPolygon1":
### Failed to generate all binary outputs.
------------------------------------------------------------------------
??? Build error: C compiler produced errors. See the Build Log
for further details.
Code generation failed: View Error Report
Error using codegen
Не знаю, почему в сообщении об ошибке указано C compiler produced errors
вместо C++
какЯ использовал компилятор C ++ с mex -setup c++
Нужно ли конвертировать код в C?Если да, то как мне переписать код, чтобы он вместо этого использовал структуры C?