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++에 대한 지식이 거의없고, 예외가 작동하는 방식입니다.
장갑을 스마트 포인터에 두는 것을 고려하십시오. 예외가 발생하면 절대 삭제되지 않습니다. – doctorlove
Btw, const 참조로 C++에서 예외를 catch하는 것이 좋습니다. 예 :'catch (const std :: runtime_error & err)' –