C++&引用;不允许使用不完整的类型“;使用stringstream时 我有以下C++代码< /P> #包括 int main() { std::string sText=“这些是我字符串中的单词!”; 弦剑; std::stringstream ss(sText); }

C++&引用;不允许使用不完整的类型“;使用stringstream时 我有以下C++代码< /P> #包括 int main() { std::string sText=“这些是我字符串中的单词!”; 弦剑; std::stringstream ss(sText); },c++,clang,stringstream,C++,Clang,Stringstream,而且它在带有g++的Fedora上运行良好。但是,在Windows上用Visual Studio运行它(所以我猜是clang)会得到不完整的类型是不允许的。这是我的代码中的错误,还是编译器之间存在一些差异? 注意:我尝试了std::stringstream ss您未能#包括 这是允许编译的(任何标准头都可以包含任意数量的其他标准头),但通常应该包含正在使用的“东西”的头(并且stringstream在中声明)。一旦包含了头文件,VC++就会很好地编译它 [谢谢Remy]既然你使用的是std::s

而且它在带有g++的Fedora上运行良好。但是,在Windows上用Visual Studio运行它(所以我猜是clang)会得到
不完整的类型是不允许的
。这是我的代码中的错误,还是编译器之间存在一些差异? 注意:我尝试了
std::stringstream ss您未能
#包括

这是允许编译的(任何标准头都可以包含任意数量的其他标准头),但通常应该包含正在使用的“东西”的头(并且
stringstream
中声明)。一旦包含了头文件,VC++就会很好地编译它


[谢谢Remy]既然你使用的是
std::string
,你也应该
#include

为什么不试着在stringstream手册中查找一个,而只是在上面发布Q呢?include sstreamt要使用
std::stringstream
,你需要
#include
。所有的
std::
名称都是特定的头文件。要使用
std::string
,你需要
#include
,同样的,你应该
#include
来正确使用
std::string
。@RemyLebeau:好的观点。这很有效,但是为什么它得到不允许的
不完整类型
?显然,您包含的一个头声明了但没有定义
stringstream
,这使它成为不完整类型。您可以定义指向不完整类型的指针或引用,但不能定义该类型的实例。