iostream требуется для наследования от шаблона класса - PullRequest
0 голосов
/ 02 ноября 2019

При выводе класса из шаблона класса (например, пары) кажется, что нам нужно включить iostream:

Этот код работает:

#include <iostream>

class Vector: public std::pair<double,double> {
public:
    Vector() {}
    Vector(double a, double b): std::pair<double,double> (a,b) {}
};

int main
{
    return 0;
}

Но если мы опускаем #include <iostream> он даже не компилируется:

5 error: expected template-name before '<' token

Какая особенность iostream требуется для этого вида наследования?

1 Ответ

3 голосов
/ 02 ноября 2019

Какая функция iostream требуется для этого вида наследования?

Нет функции. Просто в вашей системе <iostream> может включать заголовок <utility>, где определено std::pair. Это означает, что вы получаете транзитивное включение правильного заголовка. Стандартные заголовки могут включать друг друга в качестве подробностей реализации, но это не то, на что можно положительно полагаться.

Вам следует обойтись без неправильного заголовка, который, как оказалось, работает, в пользу правильного.

...