ChatGPT解决这个技术问题 Extra ChatGPT

不允许不完整的类型:stringstream

为什么这一行会给出错误 Error: incomplete type is not allowed

stringstream ss;
你包含了哪些头文件?
我猜有一个 #include<stringstream> 或我应该使用的东西? #include <iostream> #include <cstdio> #include <cmath> #include <cstring> #include <字符串> #include <fstream> #include <cstdlib> #include <向量>

P
Prasoon Saurav

#include <sstream> 并使用完全限定名称,即 std::stringstream ss;


该错误可能是由于 stringstream 被定义为未定义的通用类型。
我认为 Visual Studio 有时允许在不包含文件的情况下使用 stringstream。也许这是错误的原因
Y
Yakov Galka

某些系统标头提供了 std::stringstream 的前向声明,但没有定义。这使其成为“不完整类型”。要解决此问题,您需要包含 <sstream> 标头中提供的定义:

#include <sstream>

r
rakslice

incomplete type 错误是当编译器遇到使用它知道是类型的标识符时,例如因为它看到了它的前向声明(例如 class stringstream;),但它没有看到完整的定义为它 (class stringstream { ... };)。

这可能发生在您没有在自己的代码中使用但仅通过包含的头文件出现的类型 - 当您包含使用该类型的头文件,而不是定义该类型的头文件时。标头本身不包含它需要的所有标头是不寻常的,但并非不可能。

对于标准库中的内容,例如 stringstream 类,请使用该类或单个函数(例如 Unix man 页面、MSDN 库等)的语言标准或其他参考文档来确定您需要什么到 #include 以使用它以及在哪个命名空间中找到它(如果有)。您可能需要搜索出现类名的页面(例如 man -k stringstream)。