Cpp从包含文件调用函数

时间:2017-11-13 11:53:01

标签: c++ header include

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

是否有可能从包含?

的文件中调用函数

例如: “main.cpp”包括“test.h”, 所以“main.cpp”中的任何函数都可以从“test.h”调用函数。

但是,在这种情况下,“test.cpp”中的代码可以从“main.cpp”调用函数而不包括它吗?

1 个答案:

答案 0 :(得分:0)

没有。您不能从其他源文件调用在其他源文件中声明的函数。还有什么呢?并且从头部开始使用单独的源;头文件包括原型和声明,而源包括定义。

例如:

// 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(){}

现在在main.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以避免包含多个文件。