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


109

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

stringstream ss;

Какие файлы заголовков вы включили?
Алан Стоукс

Полагаю, я должен был использовать #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;


Ошибка, вероятно, связана с тем, что 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).

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.