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

Eclipse, C++ method str() could not be resolved

本文关键字:C++ 方法 str Eclipse      更新时间:2023-10-16

使用默认的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()相关的错误

我在日食中CDT GCC Built-in Compiler Settings

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

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

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

该问题在某种程度上是由 g++ 头文件的结构引起的。在标头<sstream>中,仅定义了"基本"模板类。调用str()方法时,我在ostringstream时遇到了同样的错误。 当我将代码中的变量类型更改为std::basic_ostringstream<char>时,错误消失了。自动完成也再次工作(它以前不起作用,这是一个好兆头,表明 eclipse 扫描仪以某种方式出现问题)。当然,这不是一个真正好的解决方案,因为它使用 basic_* 类型,但它是摆脱(无害)错误的解决方案。"官方"类型(如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顺便说一句。