gpt4 book ai didi

c++ - QString 和 stdstring 组合在 std::stringstream 中不起作用 - 编译错误

转载 作者:行者123 更新时间:2023-11-30 04:19:48 25 4
gpt4 key购买 nike

```

#include <iostream>
#include <sstream>
#include <QString>
class Printer {
public:
inline std::ostream& operator<<(const std::string& str) {
stream << str;
return stream;
}
inline std::ostream& operator<<(int numb) {
stream << numb;
return stream;
}
inline std::ostream& operator<<(const QString& str) {
stream << str.toStdString();
return stream;
}
virtual ~Printer(void) {
std::cout << stream.str();
}

private:
std::stringstream stream;
};

int main(void)
{
QString qstring("qstring");
std::string stdstring("std::string");

Printer() << qstring << stdstring << 1; // Works like charm
Printer() << stdstring << qstring << 1; // Doesnt work :(

return 0;
}

```

任何人都可以看看上面的代码并告诉我我有评论的主要方法中的问题是什么

最佳答案

对于您的原始代码

Printer() << stdstring << qstring

等于

(Printer().operator<<(stdstring)).operator<<(qstring)

你可以在这里看到问题,

Printer() << stdstring

将返回一个ostream &,你将QString传递给ostream。我认为您应该返回流以外的 Printer

class Printer {
public:

virtual ~Printer(void) {
std::cout << o.str();
}

std::stringstream o;
};

Printer &operator<<(Printer &p, const std::string &s)
{
p.o << s;
return p;
}

Printer &operator<<(Printer &p, const QString &s)
{
p.o << s.toStdString();
return p;
}

int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);

QString qstring("qstring");
std::string stdstring("std::string");
Printer p;

p << stdstring << qstring;

return a.exec();
}

关于c++ - QString 和 stdstring 组合在 std::stringstream 中不起作用 - 编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15583239/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com