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;
pighead10
quelle
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;

Prasoon Saurav
quelle
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>
Yakov Galka
quelle
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. ).

Rakslice
quelle