2014-12-02 3 views
-2

Eigen :: Quaternionf를 사용하려고합니다. 그러나 나는 단지 하나의 쿼터니온을 오류로 정하고 싶을 때가되었다.Eigen passing Quaternionf, 한정자를 제외합니다.

oldQuat = pos; 

은 모두 Eigen :: Quaternionf이고, 다음과 같은 오류가 있습니다.

Fehler: passing 'const Quaternionf {aka const Eigen::Quaternion<float>}' as 'this' argument of 'Eigen::Quaternion<Scalar, Options>& Eigen::Quaternion<Scalar, Options>::operator=(const Eigen::Quaternion<Scalar, Options>&) [with _Scalar = float, int _Options = 0, Eigen::Quaternion<Scalar, Options> = Eigen::Quaternion<float>]' discards qualifiers [-fpermissive] 

나는이 오류가 과거를 얻을하는 방법에 대한 아이디어가 : 방법은 (http://eigen.tuxfamily.org/dox/classEigen_1_1Quaternion.html 참조) 상수로 선언되어야하기 때문이다. 미리 감사드립니다

편집 : oldQuat 헤더에 선언

for (itCanon = canonicalValues.begin(), itTraj = exampleTraj.begin(); itCanon != canonicalValues.end(); ++itCanon, itTraj++) 
    { 

     const SampledTrajectoryV2::TrajData& state = *itTraj; 

     Eigen::Vector3f axis; 
     axis << itTraj->getPosition(1), itTraj->getPosition(2), itTraj->getPosition(3); 
     Eigen::AngleAxisf angleAxis(itTraj->getPosition(0), axis); 

     Eigen::Quaternionf pos(angleAxis); 
     pos.normalize(); 


    //Error in both these lines! Same error both times. 
     Eigen::Vector3f vecVel = calcAngularVelocity(oldQuat, pos); 
     oldQuat = pos; 

     // D0 element R3x3 nicht kompatibel mit quat 

     result[*itCanon] = - A_Z*(B_Z*2*log(pos) - TAU * vecVel); 
} 

. A_z, B_Z 및 TAU도 마찬가지입니다.

+0

오류 메시지에 따르면 'oldQuat'는 **'Eigen :: Quaternionf '가 아닌 ** const입니다. –

+0

'Eigen :: Quaternionf oldQuat; ' 그것은 선언입니다. – Lenny

+1

[SSCCE] (http://sscce.org/)를 게시해야한다고 생각합니다. 나는'oldQuat'가 멤버 변수이고 당신이'const' 선언 멤버 함수 안에 있다고 생각하지만 * 관련 * 코드 없이는 말하기 어렵습니다. –

답변

-1

Eigen::Quaternionf<S, O>::operator=const이 아닌 것으로 표기되어 있지만, oldQuatconst 개체 (의심됩니다)입니다. 비 const로 변경하십시오.

+0

아니야. 사실,'operator ='는 전혀 제공되지 않고 암시 적으로 정의됩니다 (문서에 따라). –

+0

@ KonradRudolph : 그러면 템플릿의 arugments에 의존하는 멤버 중 하나가 'const' 연산자 =' – erenon

+0

'을 갖습니다. OP의 오류 메시지를 잘못 읽었습니다. –