不允许使用不完整类型:stringstream

Incomplete type is not allowed: stringstream

本文关键字:stringstream 类型 用不完 不允许      更新时间:2023-10-16

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

stringstream ss;

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

一些系统头文件提供了std::stringstream的前向声明,但没有定义。这使它成为"不完整类型"。要解决这个问题,您需要包含<sstream>头文件中提供的定义:

#include <sstream>

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

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

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