2012-02-17 200 views
0

error: passing 'const QByteArray' as 'this' argument of 'QByteArray& QByteArray::append(const QByteArray&)' discards qualifiers [-fpermissive]C++將一個const對象引用傳遞給一個函數

因爲它是一個約定,使作爲函數參數傳遞的對象,而我已經做了它。 但現在我得到一個錯誤!!, 我天璣想使功能不變,因爲我有在qbyte陣列中的數據轉換成短,然後其追加另一個數組。

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

我真的需要通過這個數組playbackbuffer;
這是給我的playbackBuffer.append(ba)錯誤;

請幫助
在此先感謝

+7

你ATLEAST不得不發佈一些代碼,使錯誤的感覺,你不這麼認爲嗎? – 2012-02-17 11:31:35

+1

我們需要更多的代碼 – 2012-02-17 11:31:55

+0

約定應該是你通過const引用*傳遞對象,如果他們不打算改變*。如果傳遞的QByteArray不應該被改變,那麼你可以將它複製到本地的QByteArray中並且在那個上工作。 – stefaanv 2012-02-17 12:03:01

回答

10

這意味着你調用一個const成員在非const成員函數。據推測,你的append函數修改字節數組。用const引用,你不應該修改。

+0

我不修改數組中的數據,只是讀取它並將其附加到另一個數組中,是否有辦法解決。 – ken 2012-02-17 12:09:46

+1

從您編輯的問題:它是可能不是常量的playbackBuffer。如果需要填寫,請不要將它作爲常量引用傳遞。 – stefaanv 2012-02-17 12:19:17

0

所以,你試圖調用一個const對象的非const函數? 這就是傳遞const xxx作爲'this'參數意味着什麼。 因爲最終任何成員函數真的是 (類* 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

Dangerously close to -1'ing,但爲什麼你會在這裏建議'const_cast'?你想要不確定的行爲嗎? – GManNickG 2012-02-17 11:36:08

+0

確實,'const_cast'是完全錯誤的,如果對象是'const',會給出未定義的行爲。如果你需要修改它,那麼不要首先聲明它爲'const'。 – 2012-02-17 11:39:26

+0

這聞起來像是你永遠不應該做的事... – hochl 2012-02-17 11:44:41

2

考慮一下:

struct foo 
{ 
    void bar(); 
}; 

const foo f; 
f.bar(); 

這裏,在調用bar(),在this指針&f。但是bar()不是一個const功能,所以this類型是foo*,這與const foo*不兼容。 (換句話說,bar()說,它可能會發生變異的foo,但f說,這是一個不可變foo

要麼bar()需要被標記爲const(如果可以),或f需要不const

在你的情況,我會假設你正在使用Qt,所以不能修改QByteArray(也不應該你,因爲append必然是一個非const功能),而是建議你習慣於在擺脫const的該對象阻止您使用該函數。

相關問題