在 C++ 程序中使用多个 .cpp 文件?

Posted

技术标签:

【中文标题】在 C++ 程序中使用多个 .cpp 文件?【英文标题】:Using multiple .cpp files in c++ program? 【发布时间】:2011-08-09 11:37:21 【问题描述】:

我最近从 Java 转移到 C++,但是现在当我编写应用程序时,我对编写 main 函数中的所有代码不感兴趣,我希望在 main 函数中调用另一个函数,但是这个另一个函数在另一个 . cpp 文件。

如果你不明白,让我解释一下: 我有一个文件:main.cpp,里面有 main 函数。

我有第二个文件:second.cpp 里面我有一个名为 second() 的函数我想从我的主函数中调用这个名为 second() 的函数..

有什么帮助吗?

【问题讨论】:

你在向a good introductory book学习C++吗? 嗯,头文件就是答案,所以既然你知道这些,就不清楚你做错了什么。贴出你拥有的代码和你得到的错误,否则我们只是猜测。 不要仅仅因为你在问题中提到它就用语言标记。 【参考方案1】:

您必须使用称为“标题”的工具。在标头中声明要使用的函数。然后将其包含在两个文件中。标头是使用#include 指令包含的单独文件。然后你可以调用其他函数。

其他.h

void MyFunc();

main.cpp

#include "other.h"
int main() 
    MyFunc();

其他.cpp

#include "other.h"
#include <iostream>
void MyFunc() 
    std::cout << "Ohai from another .cpp file!";
    std::cin.get();

【讨论】:

请问.h 文件的用途可以进一步解释吗?在我看来,它不包含 other.cpp 文件中未提及的信息 我相信,在other.cpp中#include "other.h"是没有必要的 @MichaelD.Blake 在这个例子中,你是对的。然而,实际项目通常更复杂,other.h 会定义在other.cpp 中使用的类型。通常X.cpp 会包含X.h,所以你不妨现在就习惯它。其他简化包括 other.h 中缺少标头保护。 给收到undefined reference to myFunc()的人的一封信;您需要在编译命令中包含other.cpp,以便链接器知道myFunc()....的实现。g++ main.cpp other.cpp @jackw11111,是的。未定义的引用存在问题。这意味着,如果有多个 cpp 文件,我应该将它们都包含为参数吗?【参考方案2】:

您应该拥有包含函数声明的头文件 (.h),然后是包含定义的相应 .cpp 文件。然后,您可以在任何需要的地方包含头文件。请注意,包含定义的 .cpp 文件还需要包含(对应的)头文件。

// main.cpp
#include "second.h"
int main () 
    secondFunction();


// second.h
void secondFunction();

// second.cpp
#include "second.h"
void secondFunction() 
   // do stuff

【讨论】:

【参考方案3】:

在 C/C++ 中,您有头文件 (*.H)。在那里你声明你的函数/类。因此,例如,您必须将 #include "second.h" 发送到您的 main.cpp 文件。

second.h 中,您只需像这样声明void yourFunction();second.cpp 中,您可以像

一样实现它
void yourFunction()  
   doSomethng(); 

别忘了#include "second.h"也在second.cpp开头

希望这会有所帮助:)

【讨论】:

【参考方案4】:

您可以简单地在main.cpp 上方的main() 中放置second() 函数的前向声明。如果您的second.cpp 有多个函数,并且您希望将所有函数都放在main() 中,请将second.cpp 中函数的所有前向声明放入头文件中,并将#include 放入main.cpp 中。

像这样-

第二个.h:

void second();
int third();
double fourth();

main.cpp:

#include <iostream>
#include "second.h"
int main()

    //.....
    return 0;

second.cpp:

void second()

    //...


int third()
 
    //...
    return foo;


double fourth()
 
    //...
    return f;

注意:#include "second.h" 不是second.cpp。您的编译器所需要的只是前向声明,而您的链接器将在其他文件中搜索这些声明的定义。

【讨论】:

以上是关于在 C++ 程序中使用多个 .cpp 文件?的主要内容,如果未能解决你的问题,请参考以下文章

Visual Studio C++ - 运行单独的 .cpp 文件?

使用带有头文件的 cpp 文件编写 C++ 程序

如何在 C++ 中跨多个源文件共享变量?

如何在 C++ 项目中运行多 cpp?

C++创建一个结构体应该放在.cpp文件中吗?然后调用的时候只要包含这个.cpp文件?

使用 G++ 编译多个 .cpp 和 .h 文件