Почему эта строка выдает ошибку Error: incomplete type is not allowed
?
stringstream ss;
c++
types
stringstream
свинья10
источник
источник
#include<stringstream>
что-то или что-то другое? #include <iostream> #include <cstdio> #include <cmath> #include <cstring> #include <string> #include <fstream> #include <cstdlib> #include <vector>Ответы:
#include <sstream>
и используйте полное имя, т.е.std::stringstream ss;
источник
Некоторые системные заголовки содержат предварительное объявление
std::stringstream
без определения. Это делает его «неполным типом». Чтобы исправить это, вам нужно включить определение, которое приведено в<sstream>
заголовке:источник
incomplete type
Ошибка , когда компилятор встречает использование идентификатора , что он знает , тип, например , потому что он видел предобъявления из него (напримерclass stringstream;
), но это не видно полного определения для него (class stringstream { ... };
).Это может произойти для типа, который вы не использовали в своем собственном коде, но присутствует только во включенных файлах заголовков - когда вы включили файлы заголовков, которые используют тип, но не файл заголовка, в котором этот тип определен. Необычно, что заголовок сам не включает все необходимые заголовки, но это возможно.
Для вещей из стандартной библиотеки, таких как
stringstream
класс, используйте стандарт языка или другую справочную документацию для класса или отдельных функций (например,man
страницы Unix , библиотеку MSDN и т. Д.), Чтобы выяснить, что вам нужно для#include
ее использования и что пространство имен, чтобы найти его, если таковое имеется. Возможно, вам придется искать страницы, на которых появляется имя класса (напримерman -k stringstream
).источник