Niekompletny typ jest niedozwolony: stringstream


109

Dlaczego ten wiersz zawiera błąd Error: incomplete type is not allowed?

stringstream ss;

Jakie pliki nagłówkowe dołączyłeś?
— Alan Stokes

Zgaduję, że był #include<stringstream>jakiś lub coś, czego powinienem był użyć? #include <iostream> #include <cstdio> #include <cmath> #include <cstring> #include <string> #include <fstream> #include <cstdlib> #include <vector>
— pighead10

Odpowiedzi:


210

#include <sstream> i użyj w pełni kwalifikowanej nazwy, tj std::stringstream ss;


Błąd jest prawdopodobnie spowodowany tym, że stringstream został zdefiniowany jako ogólny typ czegoś niezdefiniowanego.
— mireazma

Myślę, że Visual Studio czasami pozwala na użycie stringstreamu bez dołączania pliku. Może to jest przyczyną błędu
— FindOutIslamNow

40

Niektóre nagłówki systemowe zawierają deklarację do przodu std::stringstreambez definicji. To sprawia, że ​​jest to „typ niepełny”. Aby to naprawić, musisz dołączyć definicję, która jest podana w <sstream>nagłówku:

#include <sstream>

17

incomplete typeBłąd jest, gdy kompilator napotka użycie identyfikatora że wie to typ, na przykład dlatego, że widział naprzód-deklarację nim (np class stringstream;), ale nie widział pełną definicję dla niego ( class stringstream { ... };).

Może się to zdarzyć w przypadku typu, którego nie używałeś we własnym kodzie, ale jest obecny tylko w dołączonych plikach nagłówkowych - gdy dołączyłeś pliki nagłówkowe, które używają tego typu, ale nie w pliku nagłówkowym, w którym typ jest zdefiniowany. To niezwykłe, że nagłówek sam nie zawiera wszystkich potrzebnych mu nagłówków, ale nie jest to niemożliwe.

W przypadku rzeczy z biblioteki standardowej, takich jak stringstreamklasa, użyj standardu językowego lub innej dokumentacji referencyjnej dla klasy lub poszczególnych funkcji (np. manStrony uniksowe , biblioteka MSDN itp.), Aby dowiedzieć się, czego potrzebujesz, aby #includez niej skorzystać i czego przestrzeń nazw, aby ją znaleźć, jeśli taka istnieje. Może być konieczne wyszukanie stron, na których pojawia się nazwa zajęć (np man -k stringstream.).

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.