Ein unvollständiger Typ ist nicht zulässig: stringstream


109

Warum gibt diese Zeile den Fehler aus Error: incomplete type is not allowed?

stringstream ss;

Welche Header-Dateien haben Sie aufgenommen?
Alan Stokes

Ich vermute, es gab ein #include<stringstream>oder etwas, das ich hätte verwenden sollen? #include <iostream> #include <cstdio> #include <cmath> #include <cstring> #include <string> #include <fstream> #include <cstdlib> #include <vector>
pighead10

Antworten:


210

#include <sstream> und verwenden Sie den vollständig qualifizierten Namen, dh std::stringstream ss;


Der Fehler ist wahrscheinlich darauf zurückzuführen, dass Stringstream als generischer Typ von etwas Undefiniertem definiert wurde.
Mireazma

Ich denke, Visual Studio erlaubt manchmal die Verwendung von Stringstream ohne die Datei einzuschließen. Vielleicht ist dies die Fehlerursache
FindOutIslamNow

40

Einige der Systemheader enthalten eine Vorwärtsdeklaration std::stringstreamohne Definition. Dies macht es zu einem "unvollständigen Typ". Um dies zu beheben, müssen Sie die Definition einfügen, die in der <sstream>Kopfzeile enthalten ist:

#include <sstream>

17

Ein incomplete typeFehler liegt vor, wenn der Compiler auf die Verwendung eines Bezeichners stößt, von dem er weiß, dass er ein Typ ist, beispielsweise weil er eine Vorwärtsdeklaration davon gesehen hat (z. B. class stringstream;), aber keine vollständige Definition dafür gesehen hat ( class stringstream { ... };).

Dies kann für einen Typ passieren, den Sie nicht in Ihrem eigenen Code verwendet haben, der jedoch nur über enthaltene Header-Dateien vorhanden ist - wenn Sie Header-Dateien eingefügt haben, die den Typ verwenden, nicht jedoch die Header-Datei, in der der Typ definiert ist. Es ist ungewöhnlich, dass ein Header nicht alle benötigten Header enthält, aber nicht unmöglich.

stringstreamVerwenden Sie für Dinge aus der Standardbibliothek, wie z. B. die Klasse, den Sprachstandard oder eine andere Referenzdokumentation für die Klasse oder die einzelnen Funktionen (z. B. Unix- manSeiten, MSDN-Bibliothek usw.), um herauszufinden, was Sie für #includedie Verwendung benötigen und was Namespace, um es zu finden, falls vorhanden. Möglicherweise müssen Sie nach Seiten suchen, auf denen der Klassenname angezeigt wird (z man -k stringstream. B. ).

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.