У меня есть следующий код С++
#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?