Заголовочный файл iostream просто содержит объявления? - PullRequest
0 голосов
/ 03 декабря 2018

Я учусь программированию на C ++.Я писал программу для реализации функций калькулятора:

Как видно, я включаю заголовочный файл iostream.

#include <iostream>
#include "calculator.h"
int main()
{
    //This program is meant to mimic the functionality of a calculator which 
    //support basic arithmetic operations.

    //we will ask the user to input the desired operation and operands 
    getUserInput();

    //We perform the mathematical operation and return the result
    computeResult();

    //We will print the output to the screen
    printResult();

    return 0;
}

Теперь я пишу отдельный файл cpp для функции getUserInput.

#include<iostream>
int getUserInput()
{
    int a;
    std::cout << "enter your input " << std::endl;
    std::cin >> a;
    return (a);

}

Здесь я также включил iostream.Это нормально?

Поскольку, я подозреваю, если iostream содержит определения, это может привести к ошибке компоновки, связанной с несколькими определениями.

Ответы [ 2 ]

0 голосов
/ 03 декабря 2018

Содержит ли заголовочный файл iostream только объявления?

Нет.Он также содержит определения.Например, указано, что он включает <ios>, который, среди прочего, определяет шаблоны классов, такие как std::basic_istream.

Здесь также я включаю iostream.Это нормально?Поскольку я подозреваю, что если iostream содержит определения, это может привести к ошибке компоновки, связанной с несколькими определениями.

<iostream>, а также все другие стандартные заголовки будут защищены средствами защиты заголовков или аналогичным механизмом дляубедитесь, что содержимое включено только один раз, несмотря на несколько макросов включения.Кроме того, они не будут содержать определения, которое не должно содержаться более чем в одной единице перевода в соответствии с правилом одного определения.

Итак, да: можно включать стандартные заголовки несколькораз.Как внутри единицы перевода, так и из нескольких отдельных единиц перевода.

0 голосов
/ 03 декабря 2018

Вы правы, что заголовок, содержащий определения глобальных имен, не может быть включен более чем в один исходный файл, не вызывая ошибок ссылок.Стандартные заголовки этого не делают.

...