从另一个文件访问 non-member 函数

Accessing non-member functions from another file

我想知道是否可以从另一个文件访问 non-member 函数。也就是说,在 .cpp 中而不是在其 header.

中声明和定义的函数

我做了一个简短的例子来说明我的问题:

我有一个非常基本的 header 文件,名为 Shape.hpp,它只声明了一个函数,该函数将打印单词“Square”

#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 文件中,我尝试同时调用 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 文件能够在不修改我的 Shape.hppShape.cpp 文件的情况下使用 printCircle()

我面临一个非常具体的问题,我正在为 class 编写测试,但需要为 non-member 函数编写测试。

使用extern关键字,在你要使用的文件中声明extern void printCircle()。它让编译器知道该函数是在别处定义的。

#include “Shape.hpp”

extern void printCircle();

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

    Shape shape;
    shape.printSquare();
    printCircle();
}