2012-02-17 2 views
0

error: passing 'const QByteArray' as 'this' argument of 'QByteArray& QByteArray::append(const QByteArray&)' discards qualifiers [-fpermissive]C++은 const 객체 참조를 함수에 전달합니다.

함수 인수로 전달하는 동안 객체를 const로 만드는 관례이기 때문에이 작업을 수행했습니다. 하지만 지금은 오류가 발생했습니다 !! qbyte 배열의 데이터를 short로 변환 한 다음 다른 배열을 추가해야하므로 함수를 상수로 만들고 싶습니다.

QByteArray ba((const char*)m_output.data(), sizeof(ushort)); 
    playbackBuffer.append(ba); 

정말이 배열을 playbackbuffer에 전달해야합니다.
내게 오류가 있습니다. playbackBuffer.append(ba);

당신이 CONST 객체의 비 const를 함수를 호출하려고 그래서

+7

오류를 이해하기 위해 코드를 게시해야합니다. 그렇게 생각하지 않습니까? –

+1

우리는 더 많은 코드가 필요합니다 –

+0

컨벤션은 const 참조로 객체를 넘겨 주어야합니다 *. 전달 된 QByteArray를 변경하면 안되면 로컬 QByteArray에 복사하여 해당 QByteArray에서 작업 할 수 있습니다. – stefaanv

답변

10

이것은 const 멤버에서 비 const 멤버 함수를 호출한다는 것을 의미합니다. 아마도 append 함수는 바이트 배열을 수정합니다. const 참조를 사용하면 수정하면 안됩니다. this 포인터가 &f입니다 bar()에 호출, 여기

struct foo 
{ 
    void bar(); 
}; 

const foo f; 
f.bar(); 

:

+0

배열 im의 데이터를 읽지 않고 다른 배열에 추가하는 방법은 없습니다. – ken

+1

수정 된 질문 : const가 아닌 playbackBuffer입니다. 그것을 채워야 할 경우 const 참조로 전달하지 마십시오. – stefaanv

0

사전에
감사 도와주세요? 그것은 'this'인수로서 const xxx를 전달하는 것입니다. 궁극적으로 모든 멤버 함수가 실제로 (클래스 * this, 나머지 인수)이기 때문에

0

중 하나는 당신에게

QByteArray& QByteArray::append(const QByteArray&); 

QByteArray& QByteArray::append(const QByteArray&) const; 

(매우 가능성이 해결 될 수 있도록, 개체 자체를 변경하지만 단지 두 배열이 추가 반환하지 않는 경우 무엇이든) 또는 단지

QByteArray* pObj = const_cast<QByteArray*>(&your_obj) 
    if (pObj) 
     pObj->append(... 
+1

위험에 가까운 -1'ing,하지만 왜 여기에'const_cast'를 제안하겠습니까? 정의되지 않은 동작을 원하십니까? – GManNickG

+0

실제로,'const_cast'는 완전히 틀렸고, 객체가'const'이면 정의되지 않은 행동을합니다. 그것을 수정할 수 있어야 할 필요가 있다면, 먼저 const로 선언하지 마십시오. –

+0

이 냄새는 절대해서는 안되는 냄새가납니다 ... – hochl

2

이 고려하십시오. 그러나 bar()은 const 함수가 아니므로 this의 유형은 과 호환되지 않는 foo*입니다. (즉, bar() 그것이 foo를 변이 수도라고하지만, f는 비 가변 foo 말한다.) (이 할 수있는 경우)

어느 bar() 필요가 const로 표시하거나 f 요구 const을하지 않을 수 있습니다. 귀하의 경우에는

, 나는 ( append는 반드시 const가 아닌 함수이기 때문에, 당신도해야한다) 당신이 Qt를를 사용하는 등 QByteArray을 수정할 수 없습니다 가정, 대신 당신의 const 없애 제안하는거야 이 객체는 당신이 함수를 사용할 수 없게합니다.

관련 문제