2014-02-13 3 views
3

Matlab에서 mex 파일로 만들려는 C++에 Eigen 라이브러리를 사용하려고합니다. 코드를 아래의 필수 항목으로 나눴습니다. 길이가 입력 행렬의 행 수와 일치하는 리턴 벡터를 만들어야합니다.Matlab mex 파일의 고유 벡터 사용

double y_OUT[nrow] = {};

  • 오류 C2057 : 예상 상수 표현 오류
  • 오류 C2466 : 나는 라인에 해당하는 컴파일에 follwing을 오류를 얻을 아래의 코드와

    은의 배열을 할당 할 수 없습니다 일정한 크기 0

나는 왜 길이 nrow의 벡터를 할당 할 수 없는지 알 수 없다. 특정 줄의 주석 처리를 제거하고 nrow를 인쇄하여 실제로 올바른 번호가 포함되어 있는지 확인했습니다. 누구든지 어떤 포인터를 줄 수 있습니까 (말장난 의도)?

 void mexFunction(
      int   nlhs, 
      mxArray  *plhs[], 
      int   nrhs, 
      const mxArray *prhs[] 
      ) 
    { 



     double *x_IN; 
     int nrow,ncols; 

     /* Check for proper number of arguments */ 
     //... 

     x_IN = mxGetPr(prhs[0]); 
     nrow = (int)mxGetM(prhs[0]); 
     ncols = (int)mxGetN(prhs[0]); 

     double y_OUT[nrow] = {}; 

     MatrixXd x=Map<MatrixXd>(x_IN,nrow,ncols); 
     VectorXd Respons=VectorXd::Zero(nrow); 

     Map<VectorXd>(y_OUT,nrow)=Respons.array(); 
     return; 
    } 
+0

코드를 수정할 수 있었습니까? 작업 버전으로 업데이트 할 수 있습니까? mex matlab 입력 매개 변수에서 Eigen Matrix를 만들 수 없습니다. – Pedro77

답변

6

아무 것도 할당하지 않았습니다. double y_OUT[nrow] = {}; 줄에는 두 가지 오류가 있습니다. 오류 메시지에 설명 된대로.

  1. nrowconstexpr 없습니다. 컴파일 타임에는 평가할 수 없습니다.
  2. 중괄호 이니셜 라이저에 의해 벡터에 0 개의 요소가 있다고 제시하면 이해가되지 않습니다.

동적 할당의 올바른 구문은 double* y_OUT = new double[nrow];입니다. 나는 그것이 당신이 원하는 것이라고 생각합니다. double y_OUT[nrow] 구문을 사용하면 정적 할당, 즉 배열의 크기를 컴파일 할 때 알아야하는 경우에 사용됩니다.

사이드 노트 : 물론 기억이 남는 것을 기억해야합니다. 그리고이 문제는 주제와 완전히 관련이 없습니다. =)

+0

@MrOperator 변환을 Eigen으로 재현 할 수 없습니다. 다음을 참조하십시오. http://stackoverflow.com/questions/43160609/converting-in-and-out-arguments-from-matlab-to-eigen- C 라이브러리 개체 유형? 감사 – Pedro77