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

142

为什么这行代码会出现 Error: incomplete type is not allowed 的错误?

stringstream ss;

你包含了哪些头文件? - Alan Stokes
我猜我应该使用了#include<stringstream>或者其他什么东西? #include <iostream> #include <cstdio> #include <cmath> #include <cstring> #include <string> #include <fstream> #include <cstdlib> #include <vector> - pighead10
3个回答

270

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


错误可能是由于stringstream被定义为未定义的某个通用类型所导致的。 - mireazma
1
我认为Visual Studio有时允许使用stringstream而不需要包含文件。也许这就是错误的原因。 - FindOutIslamNow

63

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

#include <sstream>

19
一种不完整类型错误发生于编译器遇到一个标识符的使用,该标识符是一个类型,例如因为它已经看到了它的前向声明(例如class stringstream;),但没有看到它的完整定义(例如class stringstream { ... };)。
这可能会发生在您的代码中未使用但仅通过包含的头文件存在的类型上 - 当您已经包含使用该类型的头文件,但并未包含定义该类型的头文件时。 头文件本身未包含其所需的所有头文件是不寻常的,但并非不可能。
对于来自标准库的东西,例如stringstream类,请使用语言标准或其他参考文档来查找类或单个函数(例如Unix man页面、MSDN库等)需要#include以及是否需要找到它所在的名称空间。 您可能需要搜索出现类名的页面(例如man -k stringstream)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接