Неполный тип не допускается: stringstream

109

Почему эта строка выдает ошибку Error: incomplete type is not allowed?

stringstream ss;
свинья10
источник
Какие файлы заголовков вы включили?
Алан Стоукс
Полагаю, я должен был использовать #include<stringstream>что-то или что-то другое? #include <iostream> #include <cstdio> #include <cmath> #include <cstring> #include <string> #include <fstream> #include <cstdlib> #include <vector>
pighead10

Ответы:

211

#include <sstream> и используйте полное имя, т.е. std::stringstream ss;

Prasoon Saurav
источник
Ошибка, вероятно, связана с тем, что stringstream определяется как общий тип чего-то undefined.
mireazma
Я думаю, что визуальная студия иногда позволяет использовать строковый поток без включения файла. Может быть, это причина ошибки
FindOutIslamNow
40

Некоторые системные заголовки содержат предварительное объявление std::stringstreamбез определения. Это делает его «неполным типом». Чтобы исправить это, вам нужно включить определение, которое приведено в <sstream>заголовке:

#include <sstream>
Яков Галка
источник
17

incomplete typeОшибка , когда компилятор встречает использование идентификатора , что он знает , тип, например , потому что он видел предобъявления из него (например class stringstream;), но это не видно полного определения для него ( class stringstream { ... };).

Это может произойти для типа, который вы не использовали в своем собственном коде, но присутствует только во включенных файлах заголовков - когда вы включили файлы заголовков, которые используют тип, но не файл заголовка, в котором этот тип определен. Необычно, что заголовок сам не включает все необходимые заголовки, но это возможно.

Для вещей из стандартной библиотеки, таких как stringstreamкласс, используйте стандарт языка или другую справочную документацию для класса или отдельных функций (например, manстраницы Unix , библиотеку MSDN и т. Д.), Чтобы выяснить, что вам нужно для #includeее использования и что пространство имен, чтобы найти его, если таковое имеется. Возможно, вам придется искать страницы, на которых появляется имя класса (например man -k stringstream).

Rkslice
источник