Pourquoi cette ligne donne-t-elle l'erreur Error: incomplete type is not allowed
?
stringstream ss;
c++
types
stringstream
pighead10
la source
la source
#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>Réponses:
#include <sstream>
et utilisez le nom complet iestd::stringstream ss;
la source
Certains des en-têtes système fournissent une déclaration avant
std::stringstream
sans 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:la source
Une
incomplete type
erreur 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 exempleclass 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
stringstream
classe, utilisez le standard du langage ou une autre documentation de référence pour la classe ou les fonctions individuelles (par exempleman
, pages Unix , bibliothèque MSDN, etc.) pour déterminer ce dont vous avez besoin#include
pour 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 exempleman -k stringstream
).la source