首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QString和标准字符串组合在std::stringstream中不起作用-编译错误

QString和标准字符串组合在std::stringstream中不起作用-编译错误
EN

Stack Overflow用户
提问于 2013-03-23 12:10:08
回答 1查看 891关注 0票数 1
代码语言:javascript
复制
```javascript

#include

#include

#include

类别打印机{

公共:

代码语言:javascript
复制
inline std::ostream& operator<<(const std::string& str) {
代码语言:javascript
复制
stream << str;
代码语言:javascript
复制
return stream;
代码语言:javascript
复制
}
代码语言:javascript
复制
inline std::ostream& operator<<(int numb) {
代码语言:javascript
复制
stream << numb;
代码语言:javascript
复制
return stream;
代码语言:javascript
复制
}
代码语言:javascript
复制
inline std::ostream& operator<<(const QString& str) {
代码语言:javascript
复制
stream << str.toStdString();
代码语言:javascript
复制
return stream;
代码语言:javascript
复制
}
代码语言:javascript
复制
virtual ~Printer(void) {
代码语言:javascript
复制
std::cout << stream.str();
代码语言:javascript
复制
}

私有:

代码语言:javascript
复制
std::stringstream stream;

};

int main(void)

{

代码语言:javascript
复制
QString qstring("qstring");
代码语言:javascript
复制
std::string stdstring("std::string");
代码语言:javascript
复制
Printer() << qstring << stdstring << 1;   // Works like charm
代码语言:javascript
复制
Printer() << stdstring << qstring << 1;   // Doesnt work :(
代码语言:javascript
复制
return 0;

}

代码语言:javascript
复制

有没有人可以看一下上面的代码,告诉我我有注释的main方法的问题是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-03-23 13:52:10

您的原始代码

代码语言:javascript
复制
Printer() << stdstring << qstring

等于

代码语言:javascript
复制
(Printer().operator<<(stdstring)).operator<<(qstring)

你可以在这里看到问题,

代码语言:javascript
复制
Printer() << stdstring

将返回一个ostream &,然后将QString传递给ostream。我认为你应该返回Printer而不是流。

代码语言:javascript
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15583239

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档