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


109

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

stringstream ss;

您包括哪些头文件?
艾伦·斯托克斯

我猜#include<stringstream>应该使用某个或某项?#include <iostream> #include <cstdio> #include <cmath> #include <cstring> #include <string> #include <fstream> #include <cstdlib> #include <vector>
pighead10 2011年

Answers:


210

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


该错误可能是由于stringstream被定义为未定义内容的通用类型。
mireazma

我认为Visual Studio有时允许使用stringstream而不包含文件。也许这是错误的原因
FindOutIslamNow

40

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

#include <sstream>

17

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

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.