Комбинация QString и stdstring не работает в std :: stringstream — ошибка компиляции

« `

#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;
}

« `

Может кто-нибудь, пожалуйста, посмотрите на код выше и скажите мне, что проблема в основном методе, где у меня есть комментарии

1

Решение

Для вашего оригинального кода

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();
}
2

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

Других решений пока нет …

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