包含文件中的 CPP 调用函数

Cpp calling function from including file

本文关键字:调用 函数 CPP 文件 包含      更新时间:2023-10-16

因此,就我的 cpp 知识而言,我可以调用在我 #include 的头文件中声明/定义的函数。

是否可以从包含的文件调用函数?

例如: "main.cpp"包括"test.h", 因此,来自"main.cpp"的任何函数都可以调用来自"test.h"的函数。

但是,在这种情况下,来自"test.cpp"的代码是否可以调用来自"main.cpp"的函数而不包含它?

No.不能从另一个源文件调用在另一个源文件中声明的函数。还有这是什么?并且是一个很好的用法,将源与标头分开;头文件包括原型和声明,而源文件包括定义。

例如:

// Shape.h
#ifndef SHAPE_H
#define SHAPE_H
class Shape{
//...
};
#endif
// Shape2D.h
#ifndef Shape2D.h
#define Shape2D.h
class Shape2D{
//...
};
#endif

现在源文件:

// Shape.cpp
#include "Shape.h"
// Definitions here:
Shape::Shape(){}
// Shape2D.cpp
#include "Shape2D.h"
// Some definitions here:
Shape2D::Shape2D(){}

现在主要.cpp:

#include "Shape2D.h"
// #include "Shape.h"
int DoSomeStuff();
int main(){
Shape2D a;
Shape b;
return 0;
}
int DoSomeStuff(){
// ....
}

正如您在上面看到的,我只是包含了Shape2D.h并且可以使用类Shape而不包含其头文件Shape.h那是因为Shape2D.h包含它,因此它的内容被添加到其中,然后两个文件的所有内容都存在于我的主源文件中。

Main.cpp包括间接Shape.h

  • 还要记住,源文件中声明的内容的作用域为它,这意味着无法从外部看到。

尝试这样的事情:

Shape.cpp呼叫DoSomeThing

#include "main.cpp"
int x = DoSomeThing();
  • 上面至少有一个编译时错误:至少已经定义了类ShapeShape2D

  • 我的建议:不要包含源文件,使用Inclusions guardspragma once以避免包含多个文件。