У меня есть следующий код С++
#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;, но получил точно такую же ошибку.
Включить стрим
Чтобы использовать std::stringstream, вам нужно #include <sstream>. Все std:: имена живут в отдельных заголовочных файлах.
А чтобы использовать std::string, вам нужно #include <string>





Вы не смогли #include <sstream>.
Это разрешено для компиляции (любой стандартный заголовок может включать произвольное количество других стандартных заголовков), но обычно вы должны включать заголовки для «вещей», которые вы используете (и stringstream объявлен в <sstream>). Как только вы включите заголовок, VC++ отлично его скомпилирует.
[Спасибо, Реми] Поскольку вы используете std::string, вы также должны использовать #include <string>.
И в том же ключе вы должны #include <string> использовать std::string правильно.
@RemyLebeau: хорошая мысль.
Это работает, но почему он получает incomplete type is not allowed?
По-видимому, один из включенных вами заголовков объявляет, но не определяет stringstream, что делает его неполным типом. Вы можете определить указатель или ссылку на неполный тип, но не можете определить его экземпляр.
Почему бы не попытаться найти A в руководстве по stringstream и вместо этого просто опубликовать Q на SO?