리눅스 C++의 함수 호출 문제에 관하여
글쓴이: frerap / 작성시간: 화, 2009/03/31 - 10:10오후
제가 VC 2008에서 작업을 하였고
이것을 리눅스에서 옮겨서 컴파일해서 실행을 하는데요.
행렬연산이 필요하여 연산함수들을 만들고 라이브러리를 만들었습니다.
거기에는 예를 들어
Transpose(MatDoub &mat)
이런 함수들이 있는데요.
문제는
함수 호출을 할때
Transpose( mat1 * mat2) 이런식으로 하면
VC에서는 먹히는데
리눅스에서는 안먹히는 군요.
Transpose(MatDoub &mat)에서 &는 변수 복사 시간을 줄이기 위해서 참조자를 사용한 건데요.
Transpose(mat1) 이런식은 완전 문제 없는데
Transpose( mat1 * mat2) 이렇게 인수자체가 어떤 연산의 결과인 것은 리눅스에서
임시변수에서 포인터로 형변환 할수 없다 어쩌구 저쩌구 하면서 안되더라구요.
근데 이상한건
MatDoub라는 변수를 정의 할때 내부에 연산자 오퍼레이터를 이용하여
<<를 메트릭스 곱셈으로 정의 하였는데
이때는
mat << (mat1*mat2) 이런식으로 해도 된다는 겁니다.
혹시 이것에 대하여 해결책이나 한말씀 해주시면 대단히 감사 드리겠습니다.
Forums:
안되는게
안되는게 정상입니다. 임시변수에 대해서는 상수 레퍼런스만 가능합니다.
xylosper 님의 "간결한"
xylosper 님의 "간결한" 설명을 보충하자면...
선언이 Transpose(const MatDoub& mat) 이면 가능합니다.
Transpose( mat1 * mat2) 처럼 호출할 수 있지요.
이럴 경우 Transpose 가 mat 를 변경할 수 없으니 transpose 된 결과를 반환해야 하겠지요.
Transpose 가 mat 를 변경해야만 한다면,
Transpose( mat1 * mat2) 같은 식으로는 쓸 수 없습니다.
cleol 님 감사합니다.^^
덕분에 해결했어요. const를 넣어주면 되는 군요.
프로그램이 speed up 되었습니다.
대단히 감사합니다.^^
댓글 달기