【问题标题】:Include declaration but not definition in main file C++ [duplicate]在主文件C++中包含声明但不包含定义[重复]
【发布时间】:2020-12-10 17:20:06
【问题描述】:

C++中使用多个文件时,例如:ma​​in.cppdefinition.cppdeclaration.h强>

// declaration.h
int Myfunc();
//definition.cpp
#include "declaration.h"

int MyFunc() {return 5;};
// main.cpp
#include <iostream>
#include "declaration.h"

int main()
{
    std::cout << Myfunc() << std::endl;
}

为什么我不需要在主文件中包含定义文件? 我只包含了声明,程序怎么知道Myfunc()的定义?

【问题讨论】:

  • 你是如何编译程序的?是否有任何类型的配置文件,或者这是一个 Visual Studio 项目?
  • 该定义包含在构建过​​程的链接步骤中的可执行文件中。见,例如stackoverflow.com/q/6264249/9988487 了解更多详情。
  • 这是Linker的责任。
  • 我认为second answer 解释了您的问题。
  • 因为下一阶段:“链接”。通常会发生什么:编译完成definition.cpp =&gt; definition.omain.cpp =&gt; main.o 然后我们将目标文件链接到可执行文件中:main.o + definition.o =&gt; application

标签: c++ c++11 file-handling


【解决方案1】:
  • 声明就像函数的签名,在编译时只需要签名(传递什么变量以及函数将返回什么,以便您可以围绕它编写其他代码)。对函数的实际调用在链接期间得到解决。如果您将在头文件中包含定义,并且该头文件包含在多个源文件中,那么同一函数将有多个定义。

【讨论】:

  • 谢谢!这与@MartinYork 的评论一起回答了我的问题!
猜你喜欢
  • 2021-12-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-03
  • 2016-06-18
相关资源
最近更新 更多