首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Visual:"str()不是std::ostringstream的成员“

Visual:"str()不是std::ostringstream的成员“
EN

Stack Overflow用户
提问于 2015-04-20 09:55:38
回答 2查看 2.6K关注 0票数 4

我在Visual 2013 ( Xcode 6.2编译)中有一个编译器错误,我无法理解这个错误:

下面的示例代码是格式转换中的抽象的、简化的摘录:

代码语言:javascript
复制
#include<sstream>
void main(...){
    (std::ostringstream()<<0).str();
}

以下版本编译:

代码语言:javascript
复制
#include<sstream>
void main(...){
    (std::ostringstream()).str();
}

背景:

代码语言:javascript
复制
std::string result=(std::ostringstream()<<value).str(); 

我在这里错过了什么?谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-04-20 10:01:10

错误消息是error C2039: 'str': is not a member of 'std::basic_ostream<char,std::char_traits<char>>'。它在抱怨strstd::basic_ostream<char,std::char_traits<char>> aka std::ostream中失踪,而不是std::ostringstream

std::ostringstreamoperator<<仍然返回std::ostream& (它从std::ostream继承这些运算符),后者没有str()成员。

Clang/libc++ ( Xcode使用的)在其rvalue流插入运算符中实现了一个扩展,

  1. 与继承的成员operator<<相比,它更好地匹配rvalue流,
  2. 按原样返回对流的引用,而不将其转换为std::ostream&

这使得您的代码可以在Xcode中编译。

要调用.str(),可以手动将static_cast (std::ostringstream()<<value)返回到std::ostringstream& (为libc++兼容性使用std::ostringstream &&const std::ostringstream&,因为它的rvalue流插入操作符返回对流的rvalue引用)。

票数 5
EN

Stack Overflow用户

发布于 2015-04-20 10:12:45

根据我的编译器,它实际上是sst.cpp(3) : error C2039: “str”: is not a member of “std::basic_ostream<char,std::char_trait s<char>>”。请注意,它是关于ostringstream.而不是ostream的。<<是为ostream定义的运算符(std::ostream::operator<<,您可以引用)。

因此,您实际上可以使用ostreamostringstream转换回static_cast<>,因为返回的对象实际上属于后一个类,如下所示:

代码语言:javascript
复制
#include<sstream>
void main(...){
    (static_cast<std::ostringstream&>(std::ostringstream() << 0)).str();
}

会编译。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29744622

复制
相关文章

相似问题

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