为什么iostream头文件没有被包含?

3
#include <sstream>
using namespace std;

int main()
{
    cout << "hi"; // error: undeclared cout
}

根据我所了解的,sstream类是从iostream类派生而来,但为什么它不会自动包含进来呢?


2
你有没有查看 sstream 头文件以了解包含和不包含的内容? - Will A
它并不是从标准输出派生而来的。std::cout也是从iostream派生的,但它不仅仅是这样。 - Martin York
但是当我派生类时,我不必包含基类头文件。我不知道为什么它没有被包含进来。 - user756327
2个回答

11

iostream基于类不同于iostream标头。标准标头不必互相包含,或者可以以任何顺序包含彼此。如果您希望使用<iostream>的内容,则必须#include <iostream>


抱歉,我不明白你所说的基于iostream的类是什么意思。 - user756327
基于std::ostream等的类。 - Puppy

1

std::sstream 派生自 std::istreamstd::ostream。这意味着您不需要包含 <istream><ostream>。然而,std::cout 在这两个头文件中都没有定义。这就是为什么您需要另一个头文件 <iostream> 的原因。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接