С++ «неполный тип не разрешен» при использовании строкового потока

У меня есть следующий код С++

#include <iostream>

int main()
{
    std::string sText = "These are words in my string!";
    std::string sWord;
    std::stringstream ss(sText);
}

И он отлично работает в Fedora с g++. Однако запуск его в Windows с помощью Visual Studio (так что, я думаю, clang) получает incomplete type is not allowed. Это ошибка моего кода или есть какая-то разница между компиляторами? Примечание. Я пробовал std::stringstream ss << sText;, но получил точно такую ​​же ошибку.

Почему бы не попытаться найти A в руководстве по stringstream и вместо этого просто опубликовать Q на SO?

273K 24.12.2020 01:56

Включить стрим

Severin Pappadeux 24.12.2020 01:57

Чтобы использовать std::stringstream, вам нужно #include <sstream>. Все std:: имена живут в отдельных заголовочных файлах.

NathanOliver 24.12.2020 01:58

А чтобы использовать std::string, вам нужно #include <string>

Remy Lebeau 24.12.2020 02:02
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
4
617
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы не смогли #include <sstream>.

Это разрешено для компиляции (любой стандартный заголовок может включать произвольное количество других стандартных заголовков), но обычно вы должны включать заголовки для «вещей», которые вы используете (и stringstream объявлен в <sstream>). Как только вы включите заголовок, VC++ отлично его скомпилирует.

[Спасибо, Реми] Поскольку вы используете std::string, вы также должны использовать #include <string>.

И в том же ключе вы должны #include <string> использовать std::string правильно.

Remy Lebeau 24.12.2020 02:03

@RemyLebeau: хорошая мысль.

Jerry Coffin 24.12.2020 02:08

Это работает, но почему он получает incomplete type is not allowed?

Dock 24.12.2020 19:19

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

Jerry Coffin 24.12.2020 19:30

Другие вопросы по теме