在 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 文件?