Заголовочные файлы с использованием других функций заголовочных файлов - PullRequest
0 голосов
/ 12 октября 2019

Могут ли заголовочные файлы вызывать функции из других заголовочных файлов. И если так, как ты это делаешь. Например:

void IntStack::push(int n)
{
    IntNode *newNode = new IntNode(n);
    newNode->next = top;
    top = newNode;
    return;
}

Смогу ли я создать еще один заголовочный файл и использовать эту функцию push?

1 Ответ

1 голос
/ 12 октября 2019

Вы можете сделать это (однако вы, вероятно, не хотите, по крайней мере, не для примера, на который вы ссылаетесь - см. Ниже).

Во-первых, вот как вы могли бы сделать то, что вы просили:

// a.hpp
#pragma once // or include guards if you can't use pragma once
class IntStack {
    ...
    void push(int n);
    ...

// b.hpp
#pragma once // or include guards if you can't use pragma once
#include "a.hpp"
void foo() { IntStack i; i.push(0); }

Однако вы, вероятно, не хотите этого делать. Включение заголовков в другие заголовки может привести к увеличению времени компиляции и, как правило, в этом нет необходимости. Что вы хотите сделать, так это иметь объявления для ваших классов, типов и функций в заголовочных файлах, а затем иметь различные определения в файлах cpp.

Для вашего примера:

// a.hpp
#pragma once // or include guards if you can't use pragma once
class IntStack {
    ...
    void push(int n);
    ...

// a.cpp
#include "a.hpp"

void IntStack::push(int n) {
    IntNode *newNode = new IntNode(n);
    newNode->next = top;
    top = newNode;
    return;
}

// b.hpp
#pragma once // or include guards if you can't use pragma once
void foo();

// b.cpp
void foo() {
    IntStack i;
    i.push(0);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...