Niekompletny typ jest niedozwolony: stringstream

109

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

stringstream ss;
pighead10
źródło
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;

Prasoon Saurav
źródło
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>
Yakov Galka
źródło
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.).

rakslice
źródło