Le type incomplet n'est pas autorisé: stringstream


109

Pourquoi cette ligne donne-t-elle l'erreur Error: incomplete type is not allowed?

stringstream ss;

Quels fichiers d'en-tête avez-vous inclus?
Alan Stokes

Je suppose qu'il y avait un #include<stringstream>ou quelque chose que j'aurais dû utiliser? #include <iostream> #include <cstdio> #include <cmath> #include <cstring> #include <string> #include <fstream> #include <cstdlib> #include <vector>
pighead10

Réponses:


211

#include <sstream> et utilisez le nom complet ie std::stringstream ss;


L'erreur est probablement due au fait que le flux de chaînes est défini comme un type générique de quelque chose d'indéfini.
mireazma

Je pense que Visual Studio permet parfois d'utiliser stringstream sans inclure le fichier. C'est peut-être la cause de l'erreur
FindOutIslamNow

40

Certains des en-têtes système fournissent une déclaration avant std::stringstreamsans la définition. Cela en fait un «type incomplet». Pour résoudre ce problème, vous devez inclure la définition, qui est fournie dans l'en- <sstream>tête:

#include <sstream>

17

Une incomplete typeerreur se produit lorsque le compilateur rencontre l'utilisation d'un identifiant qu'il sait être un type, par exemple parce qu'il a vu une déclaration avant de celui-ci (par exemple class stringstream;), mais qu'il n'a pas vu une définition complète pour lui ( class stringstream { ... };).

Cela peut se produire pour un type que vous n'avez pas utilisé dans votre propre code mais qui n'est présent que dans les fichiers d'en-tête inclus - lorsque vous avez inclus des fichiers d'en-tête qui utilisent le type, mais pas le fichier d'en-tête où le type est défini. Il est inhabituel pour un en-tête de ne pas lui-même inclure tous les en-têtes dont il a besoin, mais ce n'est pas impossible.

Pour les éléments de la bibliothèque standard, tels que la stringstreamclasse, utilisez le standard du langage ou une autre documentation de référence pour la classe ou les fonctions individuelles (par exemple man, pages Unix , bibliothèque MSDN, etc.) pour déterminer ce dont vous avez besoin #includepour l'utiliser et ce que namespace pour le trouver le cas échéant. Vous devrez peut-être rechercher des pages où le nom de la classe apparaît (par exemple man -k stringstream).

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.