Доступ к функциям, не являющимся членами, из другого файла - PullRequest
0 голосов
/ 11 марта 2020

Мне интересно, возможно ли получить доступ к функциям, не являющимся членами, из другого файла. То есть функция, объявленная и определенная в. cpp, а не в ее заголовке.

Я сделал короткий пример, чтобы показать, о чем я спрашиваю:

У меня очень заголовочный файл basi c с именем Shape.hpp, который просто объявляет одну функцию, которая будет печатать слово «Квадрат»

#ifndef SHAPE_HPP
#define SHAPE_HPP

class Shape
{
public:
    void printSquare();
};

#endif

В файле Shape.cpp я определяю функцию printSquare(), но я также объявите и определите новую функцию с именем printCircle()

#include “Shape.hpp”
#include <iostream>

void Shape::printSquare()
{
    std::cout << “Square”;
}

void printCircle()
{
    std::cout << “Circle”;
}

Эти файлы тривиальны, но я пытаюсь показать мой вопрос очень простым способом.

Теперь, в моем Main.cpp file, я пытаюсь вызвать оба метода printSquare() и printCircle().

#include “Shape.hpp”

int main()
{
    Shape shape;
    shape.printSquare();
    //shape.printCircle(); <—- this will give an error because printCircle() is not visible outside of Shape.cpp
}

Есть ли способ, позволяющий моему Main.cpp файлу использовать printCircle() без изменить мои Shape.hpp или Shape.cpp файлы?

Я столкнулся с очень специфической c проблемой, когда я пишу тесты для класса, но мне нужно написать тесты для функции, не являющейся членом.

1 Ответ

2 голосов
/ 11 марта 2020

Используйте ключевое слово extern, объявите extern void printCircle () в файле, который хотите использовать. Это сообщило компилятору, что функция определена в другом месте.

#include “Shape.hpp”

extern void printCircle();

int main()
{
    // call extern function
    printCircle();

    Shape shape;
    shape.printSquare();
    printCircle();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...