qDebug () не показывает const std :: string & amp;

Я пытаюсь использовать имя некоторых векторных данных с struct, Я пытаюсь узнать, какое имя в qDebug()

Чтобы быть более понятным:

const std::string& testName = "asdfqwer";
qDebug() << testName;

Это дает сообщение об ошибке в сборке:

Error: no match for 'operator<<' in 'qDebug()() << testName'

У меня нет вариантов изменить const std::string& тип. Не могли бы вы помочь мне решить эту проблему без изменения типа?

3

Решение

qDebug() ничего не знает о std::string но это работает с const char*, Соответствующего оператора вы можете найти Вот. Вы можете достичь этого с data() или с c_str() что лучше как Jiří Pospíšil сказал.

Например:

const std::string& testName = "asdfqwer";
qDebug() << testName.data() << testName.c_str();

Также вы можете конвертировать std::string в QString с QString :: fromStdString.

6

Другие решения

Если вам часто нужно писать std :: string в qDebug () в вашем коде, вы можете реализовать эту функцию глобально (например, у вас main.cpp):

#include <QDebug>
#include <string>

QDebug operator<<(QDebug out, const std::string& str)
{
out << QString::fromStdString(str);
return out;
}

int main()
{
std::string jau = "jau";
qDebug() << jau;
return 0;
}
4

По вопросам рекламы [email protected]