fatemeh rastegar Ответов: 2

Преобразование массива matlab (MAT-file) в массив C++ :


I have a 2-D double-precision array in MATLAB that contains specific data. I want to open and use this array in my c++ program, in the first step I save it in a mat-file. 


Что я уже пробовал:

I know that MATLAB has some c functions that provide reading mat-file in c++ (matdsgn , matOpen , ...), but I have no idea how to use these functions in a c++ program. Actually, I don't know how to use a C library in C++. Any help would be appreciated.

2 Ответов

Рейтинг:
2

Richard MacCutchan

Функции библиотеки C могут быть вызваны непосредственно из программы C++. Например:

#include <math.h>

double foo(double value, int power)
{
    double answer = pow(value, (double)power);

// other code gor this method

    return answer;
}


Документация matlab - это место, где можно искать функции преобразования.


Рейтинг:
0

Jochen Arndt

Чтобы использовать библиотеку C С C++, просто свяжите свое приложение с библиотекой и включите заголовочные файлы библиотеки в исходные или заголовочные файлы, которые вызывают функции из библиотеки или используют типы, определенные в заголовочных файлах библиотеки.

Согласно с Мат-файл библиотеки и включаемые файлы - программы MATLAB &амп; Симулинк - английский Великобритания[^] существуют только общие версии библиотек. Поэтому вы должны распространять их вместе с вашим приложением.


fatemeh rastegar

thanks jochen for your answer, there are "include files" and "library files" for reading mat-files in the page you mentioned.I work with visual studio 2015.I created a c++ project and add those files to my project (plus the matdsgn.c file that reads the mat-file) and build my project.I've got these errors:


1 & gt;matdgns. obj : ошибка LNK2019: неразрешенный внешний символ _mxFree, на который ссылается функция _diagnose
1 & gt;matdgns. obj: ошибка LNK2019: неразрешенный внешний символ _mxGetNumberOfDimensions_730, на который ссылается функция _diagnose
1 & gt;matdgns. obj : ошибка LNK2019: неразрешенный внешний символ _mxIsFromGlobalWS, на который ссылается функция _diagnose
1 & gt;matdgns. obj : ошибка LNK2019: неразрешенный внешний символ _mxDestroyArray, на который ссылается функция _diagnose
1 & gt;matdgns. obj : ошибка LNK2019: неразрешенный внешний символ _matOpen, на который ссылается функция _diagnose
1 & gt;matdgns. obj : ошибка LNK2019: неразрешенный внешний символ _matClose, на который ссылается функция _diagnose
1 & gt;matdgns. obj : ошибка LNK2019: неразрешенный внешний символ _matGetNextVariable, на который ссылается функция _diagnose
1 & gt;matdgns. obj : ошибка LNK2019: неразрешенный внешний символ _matGetNextVariableInfo, на который ссылается функция _diagnose
1 & gt;matdgns. obj : ошибка LNK2019: неразрешенный внешний символ _matGetDir, на который ссылается функция _diagnose
1&ГТ;C:\Program файлы\Матлаб\R2014a\бин\х64\gsdll32.Либ : предупреждение LNK4272: конфликты библиотек машина типа 'х64 с целевым машина типа 'с архитектурой x86'
1&ГТ;C:\Program файлы\Матлаб\R2014a\бин\х64\libiomp5md.Либ : предупреждение LNK4272: конфликты библиотек машина типа 'х64 с целевым машина типа 'с архитектурой x86'
1&ГТ;E:\My сведения\аут\магистр\AMIRLab\магистр проекта\Мои коды в C++\mat_in_c\Debug\mat_in_c.exe : неустранимая ошибка LNK1120: неразрешенных внешних ссылок 9
========== Сборка: 0 успешно, 1 неудачно, 0 обновлено, 0 пропущено ==========

Jochen Arndt

"конфликты библиотек машина типа 'х64 с целевым машина типа 'с архитектурой x86'"

Вы должны установить связь с 32-разрядной версией библиотеки или создать 64-разрядное приложение. Я не совсем уверен, являются ли неразрешенные внешние ошибки источником этого несоответствия, но я предполагаю, что это так.