http://www.learncpp.com/cpp-tutorial/19-header-files/
它提到以下作为“前向声明”的另一种解决方案:
头文件只需写入一次,并且可以根据需要包含在任意数量的文件中。如果函数原型发生变化(例如通过添加新参数),最小化需要进行的更改次数,这也有助于维护。
但是,这也不能用“前瞻性宣言”制作吗?因为我们在“add.cpp”中定义函数int add(int x, int y)
,并通过输入以下内容在“main.cpp”中使用此函数:
int add(int x,int y);
? 感谢。
答案 0 :(得分:4)
这当然是可能的。但对于一个实际大小的程序,将会有大量的函数需要声明大量其他文件。如果在每个需要访问另一个函数的文件中放置一个前向声明,那么就会遇到很多问题:
答案 1 :(得分:2)
头文件包含前向声明 - 这就是他们所做的。他们解决的问题是当你有一个包含多个源代码文件的更复杂的项目时。
你可以拥有一个功能库,例如matrix.c
用于矩阵运算。如果没有头文件,则必须将所有matrix.c
函数的前向声明复制到所有其他源文件中。如果对matrix.c
进行任何更改,您还必须保持所有这些副本的最新状态。
如果您更改了matrix.c
中的功能,但忘记在其他文件中更改其声明,则不会出现编译错误。您可能也不会收到链接器错误。一旦运行程序,您将获得的只是崩溃或其他随机行为。
将声明放在一个文件中,通常是matrix.h
,将在其他地方使用,这将消除所有这些问题。
答案 2 :(得分:2)
你可以使用前向声明,但它不能很好地扩展,如果你正在使用其他人的代码或库,那就太笨了。
通常,头文件定义代码的接口。
另外,如果函数需要某些用户定义的类型,请考虑会发生什么。你还要向前宣布吗?该类型可能会定期更改其实现(保持其公共接口相同),这将导致必须定期更改所有前向声明。
头文件解决方案更易于维护(更不容易出错),并且更容易确定正在使用的代码。
答案 3 :(得分:1)
I C和C ++基本上将所有前向和/或外部声明放入标头中。这样就可以方便地将它们包含在各种源文件中,而无需手动包含它们。
在你的情况下,如果你在add.cpp中定义了add,你可以在main.cpp中提供外部声明,一切都很酷。当你有大量需要添加声明的文件并且不想为每个文件添加时,头文件可以帮助你。
答案 4 :(得分:0)
int add(int x, int y); // forward declaration using function prototype
你能解释一下“前言宣言”吗? 更进一步?如果有什么问题 我们在main()函数中使用它吗?
与#include"add.h"
相同。如果您知道,预处理器会在您编写#include
指令的.cpp文件中展开您在#include
中提及的文件。这意味着,如果你写#include"add.h"
,你会得到同样的东西,就像你在做“前向宣言”一样。
我假设add.h
有这一行:
int add(int x, int y);