2013-07-05 1 views
0

Matlab에서 mex로 컴파일하기 위해 Windows에서 Linux로 일부 C++ 코드를 적용하려고합니다. 이 프로그램은 가상 직렬 포트를 통해 데이터 장갑을 연결하도록 설계되었습니다. 전에 C++로 많은 일을 해본 적은 없기 때문에이 문제를 해결하는 데 아주 간단합니다. 큰 파일에서, 나는 다음과 같은 시도/캐치로 인해 발생하는 문제는 무엇입니까 : 내가 matlab에에서 컴파일 할 때간단한 C++ 예외 오류 (MEX)

try 
{ 
    // You can tell which com port to use by checking windows settings under hardware 
    glove = new CyberGlove(portName, (int) *baudRate); // baudrate 115200             

    /* Return CyberGlove object */ 
    mxArray* result = (mxArray*) mxMalloc(sizeof(CyberGlove)); 
    *reinterpret_cast<CyberGlove*>(result) = *glove; 
    plhs[0] = result; 
} 
catch(std::runtime_error err) 
{ 
    std::cout << "Error: " << err.what() << std::endl; 
}  

delete glove; 

을, 나는 다음과 같은 오류를 얻을 :

InitCyberGlove.cpp: In function ‘void mexFunction(int, mxArray**, int, const mxArray**)’: 
InitCyberGlove.cpp:43:11: error: expected type-specifier 
InitCyberGlove.cpp:43:30: error: expected unqualified-id before ‘err’ 
InitCyberGlove.cpp:43:30: error: expected ‘)’ before ‘err’ 
InitCyberGlove.cpp:43:30: error: expected ‘{’ before ‘err’ 
InitCyberGlove.cpp:43:30: error: ‘err’ was not declared in this scope 
InitCyberGlove.cpp:43:33: error: expected ‘;’ before ‘)’ token 

그렇게하지를 CyberGlove와 관련이 있다고 생각합니다. C++에 대한 지식이 거의없고, 예외가 작동하는 방식입니다.

+0

장갑을 스마트 포인터에 두는 것을 고려하십시오. 예외가 발생하면 절대 삭제되지 않습니다. – doctorlove

+0

Btw, const 참조로 C++에서 예외를 catch하는 것이 좋습니다. 예 :'catch (const std :: runtime_error & err)' –

답변

2

#include <stdexcept> 여기에 std::runtime_error이 선언되어 있어야합니다.

+0

고마워요! 왜 그것이 아직 포함되지 않았는지 나는 모르지만 문제는 해결되었습니다. 이제 왜 연결에 실패했는지 알아 내야 만합니다 ... – Pterosaur