133 votes

Le type incomplet n'est pas autorisé : stringstream

Pourquoi cette ligne donne-t-elle l'erreur Erreur : type incomplet n'est pas autorisé ?

stringstream ss;

0 votes

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

0 votes

Je suppose qu'il y avait un #inclure ou quelque chose que j'aurais dû utiliser? #inclure #inclure #inclure #inclure #inclure #inclure #inclure #inclure

256voto

Prasoon Saurav Points 47488

#include and use the fully qualified name c'est-à-dire std::stringstream ss;

0 votes

L'erreur est probablement due au fait que stringstream est défini comme un type générique de quelque chose d'indéfini.

1 votes

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

56voto

ybungalobill Points 31467

Certaines des en-têtes du système fournissent une déclaration anticipée de std::stringstream sans la définition. Cela en fait un 'type incomplet'. Pour corriger cela, vous devez inclure la définition, qui est fournie dans l'en-tête :

#include

19voto

rakslice Points 1939

Une erreur de type incomplet est lorsque le compilateur rencontre l'utilisation d'un identificateur qu'il sait être un type, par exemple parce qu'il a vu une déclaration anticipée de celui-ci (par exemple class stringstream;), mais n'a pas vu de définition complète pour celui-ci (class stringstream { ... };).

Cela peut arriver pour un type que vous n'avez pas utilisé dans votre propre code mais qui est présent uniquement à travers des 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 rare qu'un en-tête n'inclue pas 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 classe stringstream, consultez la norme du langage ou d'autres documentations de référence pour la classe ou les fonctions individuelles (par exemple, les pages man Unix, la bibliothèque MSDN, etc.) pour savoir ce que vous devez #include pour l'utiliser et dans quel espace de noms 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).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X