Пытаюсь с QByteArray
получить указатель на данные с помощью data()
,
ругается:
ошибка: invalid conversion from 'const char*' to 'char*' [-fpermissive]
char * TempPtrBuff = ARes.data();
В документации пишется, что возвращается char *
.
Почему может возникать ошибка?
Результат вывода QByteArray::data()
зависит от константности метода, в котором производится вызов обозначенной функции. Проще говоря:
void MyClass::method() {
char *data = ARes.data();
}
void MyClass::method() const {
const char *data = ARes.data();
}
Соответственно, если вывод QByteArray::data()
отличен от желаемого, то измените константность метода или осуществите приведение типа, например, тем же const_cast<T>()
.
QByteArray::data()
имеет перегрузки по наличию константности у объекта QByteArray
, для которого данная функция вызывается.
Если контекст использования результата вызова data()
подразумевает возможность изменения данных через полученный указатель, то нужно использовать именно неконстантный объект QByteArray
и использовать тип char*
для переменной. Если при этом возникает ошибка как в Вашем вопросе, значит Вы собираетесь изменить данные константного объекта. Это говорит об ошибке в проектировании объемлющего класса (исхожу из предположения, что QByteArray
в Вашем случае является членом класса).
Если результат data()
не предполагается изменять, то на константность объекта QByteArray
можно не обращать внимания, а просто использовать const char*
для переменной.
Попытка убрать константность через const_cast
может кончится плачевно (UB), если используемый объект действительно константен.
Пример, актуальный для любого типа T
:
T obj;
const T& cref = T;
T& ref = const_cast<T&>(cref); // OK, т.к. cref реально ссылается на неконстантный объект
const T obj;
const T& cref = T;
T& ref = const_cast<T&>(cref); // Плохо, т.к. cref реально ссылается на константный объект
Попытка модифицировать obj
через ссылку ref
во втором случае приводит к неопределенному поведению.
Другой способ избежать ошибки в строке инициализации TempPtrBuff
- использовать auto
:
auto TempPtrBuff = ARes.data();
Но это всё равно не даст возможности модифицировать константный объект.
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Виртуальный выделенный сервер (VDS) становится отличным выбором
Стоит ли повсеместно стараться как можно чаще использовать r-value ссылки? Вот, допустим, код:
Доброе время суток! У меня есть проект на Python35, а именно система автоматического тестирования для локальной сети(тестер для олимпиадных задач...