qDebug()没有显示const std :: string&

goG*_*Gud 3 c++ string qt qdebug

我试图使用一些矢量数据的名称struct.我想知道在哪个名字qDebug()

更清楚:

const std::string& testName = "asdfqwer";
qDebug() << testName;
Run Code Online (Sandbox Code Playgroud)

它在构建中给出了错误消息:

Error: no match for 'operator<<' in 'qDebug()() << testName'
Run Code Online (Sandbox Code Playgroud)

我没有更改const std::string&类型的选项.你可以帮我解决这个问题而不改变类型吗?

Che*_*byl 6

qDebug()什么都不知道,std::string但它适用const char*.您可以在这里找到合适的操作员.如上所述,您可以使用data()c_str()更好地实现此目的Ji?í Pospíšil.

例如:

const std::string& testName = "asdfqwer";
qDebug() << testName.data() << testName.c_str();
Run Code Online (Sandbox Code Playgroud)

您可以使用QString :: fromStdString转换std::string为.QString

  • 最好使用`c_str()`而不是`data()`,因为后者不需要以空值终止(直到C++ 11). (5认同)

Sim*_*rta 6

如果您需要经常在代码中将 std::string 写入 qDebug() ,则可以全局实现此函数(例如在 you 中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;
}
Run Code Online (Sandbox Code Playgroud)