遗忘功能体
许多新的程序员的一个问题是:如果我们向前声明一个函数,但不定义它会发生什么?
答案是:这取决于。如果一个正向声明,但函数永远不会调用,程序将编译并运行好。但是,如果一个前向声明,该函数被调用,但该程序从来没有定义的功能,程序将编译好,但链接器会抱怨,它不能解决函数调用。
在这个程序中,我们提出声明(),我们称之为(),但我们没有任何定义()。当我们尝试编译这个程序时,视觉工作室2005快车产生如下信息:
编译…
add.cpp
链接…
add.obj:错误LNK2001:未解决的外部符号”(int,int,int __cdecl添加)”(?添加@ @ yahhh @ Z)
add.exe:致命错误lnk1120:1未解决的疑团
你可以看到,程序编译好的,但是它没有在链接阶段(int,int,int加)没有定义。
其他类型的前向声明
前向声明是最常用的函数。然而,前向声明也适用于C++的其他标识符,如变量和用户自定义类型。其他类型的标识符(例如,用户定义类型)有不同的前向声明的语法。
我们将讨论更多关于如何在未来的经验中声明其他类型的标识符。
声明和定义
在C++中,你经常会听到“宣言”和“定义”。他们的意思是什么?你现在有足够的一个框架,以了解两者之间的差异。
定义实际实现或实例化(导致内存被分配的标识符)。下面是一些定义的例子:
许多新的程序员的一个问题是:如果我们向前声明一个函数,但不定义它会发生什么?
答案是:这取决于。如果一个正向声明,但函数永远不会调用,程序将编译并运行好。但是,如果一个前向声明,该函数被调用,但该程序从来没有定义的功能,程序将编译好,但链接器会抱怨,它不能解决函数调用。
考虑下面的程序:
#include <iostream>
int add(int x, int y); // forward declaration of add() using function prototype
int main()
{
using namespace std;
cout << "The sum of 3 and 4 is: " << add(3, 4) << endl;
return 0;
}
在这个程序中,我们提出声明(),我们称之为(),但我们没有任何定义()。当我们尝试编译这个程序时,视觉工作室2005快车产生如下信息:
编译…
add.cpp
链接…
add.obj:错误LNK2001:未解决的外部符号”(int,int,int __cdecl添加)”(?添加@ @ yahhh @ Z)
add.exe:致命错误lnk1120:1未解决的疑团
你可以看到,程序编译好的,但是它没有在链接阶段(int,int,int加)没有定义。
其他类型的前向声明
前向声明是最常用的函数。然而,前向声明也适用于C++的其他标识符,如变量和用户自定义类型。其他类型的标识符(例如,用户定义类型)有不同的前向声明的语法。
我们将讨论更多关于如何在未来的经验中声明其他类型的标识符。
声明和定义
在C++中,你经常会听到“宣言”和“定义”。他们的意思是什么?你现在有足够的一个框架,以了解两者之间的差异。
定义实际实现或实例化(导致内存被分配的标识符)。下面是一些定义的例子: