Eclipse,C ++方法str()无法解析

时间:2017-03-25 21:31:32

标签: c++ eclipse

使用默认的str()示例: http://www.cplusplus.com/reference/sstream/stringstream/str/

// stringstream::str
#include <string>       // std::string
#include <iostream>     // std::cout
#include <sstream>      // std::stringstream, std::stringbuf

int main () {
  std::stringstream ss;
  ss.str ("Example string");
  std::string s = ss.str();
  std::cout << s << '\n';
  return 0;
}

代码助手说str()无法解析,构建时没有与str()相关的错误

我在Eclipse中有CDT GCC Built-in Compiler Settings

并且未选中使用带有标志的全局提供程序:

"${COMMAND} ${FLAGS} -E -P -v -dD -std=c++11 "${INPUTS}"

我也尝试来回更换工具链但没有运气。

1 个答案:

答案 0 :(得分:1)

问题以某种方式由g ++头文件的结构引起。在标题<sstream>中,只有&#39;基本&#39;模板类已定义。调用ostringstream方法时,我遇到与str()相同的错误。 当我将代码中的变量类型更改为std::basic_ostringstream<char>时,错误就消失了。此外,自动完成工作再次起作用(之前没有工作,这是eclipse扫描仪在某种程度上遇到问题的一个好兆头)。当然这不是一个真正好的解决方案,因为它使用basic_ *类型,但它是一个摆脱(无害)错误。 &#39;官方&#39;的typedef类似ostringstream的类型在标题<iosfwd>中正向声明。 当我在标准包含文件之后的代码中包含typedef(在全局命名空间中)时:

typedef std::basic_ostringstream<char> ostringstream;

并使用此类型ostringstream代替std::ostringstream,错误也会消失。所以这个问题是由标准头文件<iosfwd>中的前向声明引起的(这并不意味着这些头文件是错误的,只是eclipse扫描器被这个问题解决了)。

我正在使用g ++(Ubuntu 5.4.0-6ubuntu1~16.04.5)5.4.0 20160609 btw。