matlab — возвращает нулевое значение при импорте файла mat в код c ++

Я новичок в c ++ и пытаюсь импортировать файл mat в свою программу на c ++. Существует отдельный класс для получения всех свойств матрицы в файле mat. Ниже приведен мой заголовочный файл readmat.h

#ifndef READMAT_H
#define READMAT_H
#include "mat.h"#include "matrix.h"#include "mex.h"class readmat
{
private:
const size_t *dimarray;
const char **dir;
MATFile *pmat;
int ndir;
mxArray *pa;
const char *file;
int minute;
int second;
const char *name;
double *pointer;
bool isdouble;
void getmxpointer();

public:

//with default value
readmat(const char *f);
//  get number of dimensions
int getnumbrofdimensions();
// get pointer to array
double* getarraypointer();
// get pointer to each dimension size
const size_t* dimensionpointer();
//number of elements
int numberofelements();};

#endif

Это мой readmat.cpp.

#include "readmat.h"#include <iostream>
#include "mat.h"#include "matrix.h"#include "mex.h"using namespace std;

// set the file name
readmat::readmat(const char *f)
{
file = f;
}

void readmat::getmxpointer()
{
pmat = matOpen(file, "r");
if (pmat == NULL) {
cout << "Error opening file" << endl;
}
else
{
dir = (const char **)matGetDir(pmat, &ndir);
if (dir == NULL) {
printf("Error reading directory of file %s\n", file);

}
else if (ndir>1)
{
cout << "The number of variables are larger than 1" << endl;
}
else
{
mxFree(dir);
matClose(pmat);
pmat = matOpen(file, "r");
for (int q = 0; q < 1; q++)
{
pa = matGetNextVariableInfo(pmat, &name);

}
matClose(pmat);
}

}}

int readmat::getnumbrofdimensions()
{
getmxpointer();
return mxGetNumberOfDimensions(pa);
}

double * readmat::getarraypointer()
{
getmxpointer();
pointer = mxGetPr(pa);
return pointer;

}

const size_t*  readmat::dimensionpointer()
{
getmxpointer();
dimarray =  mxGetDimensions(pa);
return dimarray;
}

int readmat::numberofelements()
{
getmxpointer();
return mxGetNumberOfElements(pa);
}

Следующее — мой main.cpp

#include "mat.h"#include <iostream>
#include <stdio.h>
#include <string.h> /* For strcmp() */
#include <stdlib.h> /* For EXIT_FAILURE, EXIT_SUCCESS */
#include <vector> /* For STL */
#include "readmat.h"

using namespace std;

int main()
{
int i;
int m;
int elements;
int numberofdimension;
double *datapoint;
const char *file = "pqfile.mat";
const size_t* dimepointer;

readmat thismat(file);
numberofdimension = thismat.getnumbrofdimensions();
dimepointer = thismat.dimensionpointer();
cout << "The dimensions are  ";
for (m = 0; m < numberofdimension; m++)
{
cout << *(dimepointer + m);
cout << "  ";
}
cout << endl;
cout << "This is the number of dimensions  ";
cout << numberofdimension << endl;
datapoint = thismat.getarraypointer();
elements = thismat.numberofelements();
cout << "The array elements ";
cout << elements;
cout << endl;
cout << thismat.pointer;
/*for (n = 0; n < elements; n++)
{
cout << *(arraypint + m);
cout << " ";
}*/

cin >> i;
return 0;

}

Но здесь кроме getarraypointer () другие функции работают нормально. getarraypointer () возвращает нулевое значение, и в окне просмотра указатель datapoint, которому назначен возврат из getarraypointer (), не может прочитать сообщение памяти. Когда я запускаю тот же сегмент кода в основном, он работает без проблем. Вот этот код.

MATFile *pmat;
int i;
int   ndir;
const char **dir;
const char *file = "pqfile.mat";
mxArray *pa;
const char *name;
double *in1pr;pmat = matOpen(file, "r");
if (pmat == NULL) {
printf("Error reopening file %s\n", file);
return(1);
}

//dir = (const char **)matGetDir(pmat, &ndir);
for (i = 0; i<1; i++) {
pa = matGetNextVariable(pmat, &name);
}
matClose(pmat);
in1pr = mxGetPr(pa);
cout << "Value of variable: ";
cout << *(in1pr + 5) << endl;
cin >> i;
return 0;

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]