У меня есть функция mex, которая принимает поле структуры на третьем входе (т.е. prhs[2]
), которое является логическим. Если это правда, он будет анализировать информацию из четвертого входа (т.е. prhs[3]
). В двух словах, это фрагмент кода:
mxValue = mxGetField(prhs[3], 0, "change"); mxLogical *change;
change = mxGetLogicals(mxValue);
mexPrintf("true/false: %i \n", *change);
mexEvalString("drawnow;");
if ( change ) {
mexPrintf("...Parsing info... \n");
mexEvalString("drawnow;");
mxValue = mxGetField(prhs[3], 0, "info");
nRows = mxGetM(mxValue); nCols = mxGetN(mxValue);
Eigen::Map<Eigen::VectorXd> info((double *)mxGetPr(mxValue),nRows);
}
Как видите, я делаю распечатку, чтобы увидеть, является ли ввод prhs[2]
истинным или ложным. Даже если функция выводит false, оператор if все равно выполняется, потому что я вижу распечатку ...Parsing info...
.
Почему моя функция MATLAB mex игнорирует мой оператор if?
prhs[2]
нигде в вашем коде. - person Cris Luengo   schedule 18.01.2018nrhs
перед индексацией в векторprhs
. - person Cris Luengo   schedule 18.01.2018change
— это указатель, поэтомуif(change)
проверяет, не равен ли он NULL, что является правдой (хотя может содержать значение 0). Попробуйтеif(*change)
- person buzjwa   schedule 18.01.2018