qDebug()不显示const std::string&。

6

我正在尝试使用一些向量数据的名称与struct一起使用。我试图查看在qDebug()中哪个名称。

更明确地说:

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

在构建过程中出现错误消息:

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

我无法更改const std::string&类型。请问您能否帮助我在不改变类型的情况下解决这个问题?

2个回答

17

qDebug()不了解std::string,但它可以处理const char*。你可以在这里找到适当的运算符here。你可以使用data()或者更好的c_str()来实现,正如Jiří Pospíšil所说。

例如:

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

你还可以使用QString::fromStdStringstd::string 转换为 QString


1
你可以使用QString::fromStdString将相同的内容转换为QString。 - johngull
太神奇了..我不知道qDebug()的行为原来是这样的 - goGud
7
在C++11之前,后者不一定以空字符结尾,因此最好使用c_str()而不是data() - Jiří Pospíšil
@johngull 是的,你说得对,但我认为 OP 只使用了 C++ 类型,但我将其添加到答案中,这是正确的,OP 可以选择他想要的。 - Jablonski
@JiříPospíšil 我在我的答案中添加了c_str()。谢谢。 - Jablonski
@Chernobyl 我认为如果你使用 qDebug,使用 Qt 类型是很自然的。没有使用 QtCore 就无法使用 qDebug,因此 QString 对他来说是可用的。无论如何,这里的主要问题是需要转换。 - johngull

8
如果你在代码中经常需要将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;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接