Использование Matlab "engine.h" из C++ правильно

У меня есть код, который обрабатывает кадры в каждой итерации и генерирует матрицу. Моя конечная цель - отправить данные матрицы в Matlab, чтобы изучить эволюцию матрицы с каждым кадром. Для этого я определил статическую переменную Engine в заголовочном файле (helper.h).

#include "engine.h";
#include "mex.h";
static Engine *engine;

В программе main() я открываю движок только один раз:

#include helper.h   


main(){
if (!(engine = engOpen(NULL))) {
    MessageBox ((HWND)NULL, (LPSTR)"Can't start MATLAB engine",(LPSTR) "pcTest.cpp", MB_OK);
    exit(-1);}

//here comes frame processing using a while loop
.
.  //a function is called (defined in matrix.cpp)
.
//frame processing ends
}

А внутри matrix.cpp я получаю матрицу, которую хочу отправить в Matlab Engine, поэтому я делаю что-то вроде этого:

#include helper.h

mxArray *mat;   
mat = mxCreateDoubleMatrix(13, 13, mxREAL);     
memcpy(mxGetPr(mat),matrix.data, 13*13*sizeof(double));
engPutVariable(engine, "mat", mat);

Я хочу использовать указатель на двигатель наиболее эффективным способом. Я немного озадачен тем, как правильно использовать движок Matlab.

Любая помощь приветствовалась бы, потому что документация и примеры matlab не помогли вообще, так как они содержат весь код в одном файле и не используют итерации. Заранее спасибо.

РЕДАКТИРОВАТЬ

Первая проблема решена с указателем двигателя. Решение объявить его как внешний.

#include "engine.h";
#include "mex.h";
extern Engine *engine;

и в main.cpp

#include helper.h   
Engine *engine=NULL;

main(){}

1 ответ

Решение

static означает "локально для текущего модуля компиляции". Единица компиляции, как правило, одиночная .cpp файл, так что у вас есть два engine переменные в вашей программе, один в main.o и один в matrix.o, Вы должны объявить engine как extern в заголовочном файле и определите его без какого-либо модификатора ровно в одном .cpp файл.

helper.h:

extern Engine* engine;

main.cpp:

#include "helper.h"
Engine* engine = NULL;
Другие вопросы по тегам