ChatGPT解决这个技术问题 Extra ChatGPT

Incomplete type is not allowed: stringstream

Why does this line give the error Error: incomplete type is not allowed?

stringstream ss;
What header files have you included?
I'm guessing there was an #include<stringstream> or something I should have used? #include <iostream> #include <cstdio> #include <cmath> #include <cstring> #include <string> #include <fstream> #include <cstdlib> #include <vector>

P
Prasoon Saurav

#include <sstream> and use the fully qualified name i.e. std::stringstream ss;


The error is probably due to stringstream being defined as a generic type of something undefined.
I think visual studio sometimes allows to use stringstream without including the file. Maybe this is the cause of error
Y
Yakov Galka

Some of the system headers provide a forward declaration of std::stringstream without the definition. This makes it an 'incomplete type'. To fix that you need to include the definition, which is provided in the <sstream> header:

#include <sstream>

r
rakslice

An incomplete type error is when the compiler encounters the use of an identifier that it knows is a type, for instance because it has seen a forward-declaration of it (e.g. class stringstream;), but it hasn't seen a full definition for it (class stringstream { ... };).

This could happen for a type that you haven't used in your own code but is only present through included header files -- when you've included header files that use the type, but not the header file where the type is defined. It's unusual for a header to not itself include all the headers it needs, but not impossible.

For things from the standard library, such as the stringstream class, use the language standard or other reference documentation for the class or the individual functions (e.g. Unix man pages, MSDN library, etc.) to figure out what you need to #include to use it and what namespace to find it in if any. You may need to search for pages where the class name appears (e.g. man -k stringstream).