No se permite el tipo incompleto: stringstream


109

¿Por qué esta línea da el error Error: incomplete type is not allowed?

stringstream ss;

¿Qué archivos de encabezado ha incluido?
Alan Stokes

¿Supongo que hubo #include<stringstream>algo que debería haber usado? #include <iostream> #include <cstdio> #include <cmath> #include <cstring> #include <string> #include <fstream> #include <cstdlib> #include <vector>
pighead10

Respuestas:


210

#include <sstream> y use el nombre completo, es decir std::stringstream ss;


El error probablemente se deba a que stringstream se define como un tipo genérico de algo indefinido.
mireazma

Creo que Visual Studio a veces permite usar stringstream sin incluir el archivo. Quizás esta sea la causa del error
FindOutIslamNow

40

Algunos de los encabezados del sistema proporcionan una declaración directa de std::stringstreamsin la definición. Esto lo convierte en un "tipo incompleto". Para solucionarlo, debe incluir la definición, que se proporciona en el <sstream>encabezado:

#include <sstream>

17

Un incomplete typeerror es cuando el compilador encuentra el uso de un identificador que sabe que es un tipo, por ejemplo, porque ha visto una declaración de reenvío (por ejemplo class stringstream;), pero no ha visto una definición completa para él (class stringstream { ... }; ).

Esto podría suceder para un tipo que no ha usado en su propio código, pero que solo está presente a través de archivos de encabezado incluidos, cuando ha incluido archivos de encabezado que usan el tipo, pero no el archivo de encabezado donde se define el tipo. Es inusual que un encabezado no incluya todos los encabezados que necesita, pero no es imposible.

Para cosas de la biblioteca estándar, como la stringstreamclase, use el estándar de lenguaje u otra documentación de referencia para la clase o las funciones individuales (por ejemplo man, páginas Unix , biblioteca MSDN, etc.) para averiguar qué necesita #includepara usarlo y qué espacio de nombres para encontrarlo si lo hay. Es posible que deba buscar páginas en las que aparezca el nombre de la clase (por ejemplo man -k stringstream).

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.