Неповний тип заборонений: 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

Відповіді:


210

#include <sstream> і використовувати повністю кваліфіковане ім’я, тобто std::stringstream ss;


Помилка, ймовірно, пов'язана з тим, що стринг-стрим визначається як загальний тип чогось невизначеного.
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.