Non è consentito il tipo incompleto: stringstream


109

Perché questa riga fornisce l'errore Error: incomplete type is not allowed?

stringstream ss;

Quali file di intestazione hai incluso?
Alan Stokes

Immagino che ci fosse #include<stringstream>o qualcosa che avrei dovuto usare? #include <iostream> #include <cstdio> #include <cmath> #include <cstring> #include <string> #include <fstream> #include <cstdlib> #include <vector>
pighead10

Risposte:


210

#include <sstream> e utilizza il nome completo, ad es std::stringstream ss;


L'errore è probabilmente dovuto al fatto che lo stringstream viene definito come un tipo generico di qualcosa di indefinito.
mireazma

Penso che visual studio a volte consenta di utilizzare stringstream senza includere il file. Forse questa è la causa dell'errore
FindOutIslamNow

40

Alcune delle intestazioni di sistema forniscono una dichiarazione anticipata di std::stringstreamsenza la definizione. Questo lo rende un "tipo incompleto". Per risolvere il problema, è necessario includere la definizione, fornita <sstream>nell'intestazione:

#include <sstream>

17

Un incomplete typeerrore è quando il compilatore incontra l'uso di un identificatore che sa essere un tipo, ad esempio perché ne ha visto una dichiarazione anticipata (ad esempio class stringstream;), ma non ha visto una definizione completa per esso ( class stringstream { ... };).

Ciò potrebbe accadere per un tipo che non hai usato nel tuo codice ma è presente solo attraverso i file di intestazione inclusi, quando hai incluso file di intestazione che utilizzano il tipo, ma non il file di intestazione in cui il tipo è definito. È insolito che un'intestazione non includa tutte le intestazioni di cui ha bisogno, ma non impossibile.

Per le cose dalla libreria standard, come la stringstreamclasse, usa lo standard del linguaggio o altra documentazione di riferimento per la classe o le singole funzioni (es.pagine Unix man, libreria MSDN, ecc.) Per capire cosa ti serve #includeper usarlo e cosa spazio dei nomi in cui trovarlo, se presente. Potrebbe essere necessario cercare le pagine in cui appare il nome della classe (ad esempio man -k stringstream).

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.