所以,就我的cpp知识而言,我可以调用在头文件中声明/定义的函数#include。
是否有可能从包含?
的文件中调用函数例如: “main.cpp”包括“test.h”, 所以“main.cpp”中的任何函数都可以从“test.h”调用函数。
但是,在这种情况下,“test.cpp”中的代码可以从“main.cpp”调用函数而不包括它吗?
答案 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();
上面至少有一个编译时错误:至少已经定义了Shape
和Shape2D
类。
我的建议:不要包含源文件,使用Inclusions guards
或pragma once
以避免包含多个文件。