Проблемы с преобразованием кода C ++ с использованием Structs в Matlab с codegen? - PullRequest
0 голосов
/ 18 мая 2019

У меня есть следующий код 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?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...