c ++ передача константной ссылки на объект в функцию - PullRequest
0 голосов
/ 17 февраля 2012

ошибка: передача const QByteArray в качестве аргумента this в QByteArray & QByteArray :: append (const QByteArray &) 'отбрасывает квалификаторы [-fpermissive]

, поскольку принято делать константные объекты при передаче в качестве аргументов функции, я сделал это. но теперь я получаю ошибку !! я не хочу делать функцию постоянной, поскольку мне нужно преобразовать данные в массиве qbyte в short, а затем добавить в него другой массив.

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

Мне действительно нужно передать этот массив в playbackbuffer;
Это дает мне ошибку на playbackBuffer.append(ba);

пожалуйста, помогите
заранее спасибо

Ответы [ 5 ]

11 голосов
/ 17 февраля 2012

Это означает, что вы вызываете неконстантную функцию-член для константного члена. Предположительно, ваша append функция модифицирует байтовый массив. С константной ссылкой вы не должны изменять.

2 голосов
/ 17 февраля 2012

Учтите это:

struct foo
{
    void bar();
};

const foo f;
f.bar();

Здесь при вызове bar() указатель this равен &f. Но bar() не является константной функцией, поэтому тип this равен foo*, что несовместимо с const foo*. (Другими словами, bar() говорит, что это может изменить foo, но f говорит, что это не изменяемый foo.)

Либо bar() необходимо пометить как const (если возможно), либо f не должно быть const.

В вашем случае я собираюсь предположить, что вы используете Qt и поэтому не можете изменить QByteArray (и не следует, поскольку append обязательно является неконстантной функцией), и вместо этого предлагаю вам избавиться от const на объекте, который мешает вам использовать функцию.

2 голосов
/ 17 февраля 2012

По сути, это говорит о том, что вы пытаетесь добавить постоянный массив.

Если «append» не меняет сам объект, а просто возвращает два добавленных массива, необходимо объявить метод const, чтобы разрешить вызов.

0 голосов
/ 17 февраля 2012

Либо сделай свой

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

быть

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

(вряд ли что-то решит) или просто

    QByteArray* pObj = const_cast<QByteArray*>(&your_obj)
    if (pObj)
        pObj->append(...
0 голосов
/ 17 февраля 2012

Итак, вы пытаетесь вызвать неконстантную функцию для константного объекта? Вот что будет означать передача const xxx в качестве аргумента «this». Поскольку в конечном итоге любая функция-член действительно (Класс * this, остальные аргументы)

...