一个cpp文件能不能包含另外一个cpp文件

本文探讨了C++中一个cpp文件包含另一个cpp文件时可能遇到的问题,如多重定义及如何通过extern关键字解决函数调用问题。

 

在前几天的一个面试中,有一个题目是

 

一个cpp文件能不能包含另外一个cpp文件,会有什么样的问题?

 

我看着题目,谁这么做啊,我没这么做过,肯定不知道这其中会出现的问题,当即答我不知道会出现什么问题,因为我也没试过

 

回来一查资料,用编译器一写,就会发现

002513_NKAf_2445348.png

多重定义了,相互冲突了

到网上查资料,分析

一个程序到编写代码到最冲呈现给用户的结果,就是编译-连接的过程

若有文件1.cpp,2.cpp  其中2.cpp中包含了1.cpp

从编译的角度来说,源文件都是编译各自的文件,2.cpp包含了1.cpp那么生成的目标文件2.obj也是包含了1.cpp的结果,而1.cpp编译产生1.obj,那么,当他们在链接的时候肯定会产生重复定义的错误

所以,一般源文件都会只包含系统的头文件和用户自定义的头文件,而用户自定义的头问津主要是定义一些结构体之类的。

 

那么,如果2.cpp需要调用1.cpp的函数呢  

使用extern

//1.cpp

void func1()

{

}

void func1()

{

}

 

2.cpp

extern void func1();

extern void func2();

 

void min()

{

        //调用1.cpp中的函数

}

转载于:https://my.oschina.net/lvguidong/blog/753994

在Linux上,C++项目中包含多个头文件(`.h`或`.hpp`)和实现文件(`.cpp`)通常采用以下结构: 1. **目录结构**: - 你的项目通常会有一个根目录,例如`MyProject`。 - 在根目录下,你可以创建两个主要的子目录:一个是`include`目录存放头文件,另一个是`src`目录存放源代码文件。 ```shell MyProject/ |-- include/ | |-- MyHeader1.h | |-- MyHeader2.h | `-- ... |-- src/ | |-- Main.cpp | |-- MyClass1.cpp | |-- MyClass2.cpp | `-- ... ``` 2. **头文件**: 在`include`目录下,每个相关的功能或模块应该有一到一个文件。例如,如果你有多个类,每个类都应该有自己的头文件,比如`MyClass1.h`和`MyClass2.h`。这些头文件应声明类、函数或常量等公共接口。 3. **源代码文件**: 在`src`目录下的每个`.cpp`文件,通常是实现类或函数的具体部分。`Main.cpp`通常包含了主程序入口,其他`.cpp`文件负责实现相应的功能。 ```cpp // src/MyClass1.cpp #include "MyClass1.h" // 引入类的声明 void MyClass1::method() { // 实现方法 } // src/MyClass2.cpp #include "MyClass2.h" void MyClass2::anotherMethod() { // 实现另一种方法 } // src/Main.cpp #include "MyHeader1.h" #include "MyHeader2.h" #include "MyClass1.cpp" #include "MyClass2.cpp" int main() { MyClass1 obj1; obj1.method(); MyClass2 obj2; obj2.anotherMethod(); return 0; } ``` 4. **链接**: 在编译过程中,当你在`src`目录下构建整个项目时,需要确保所有依赖的源文件都被链接。通常,你可以使用Makefile或者CMake等构建工具来管理这个过程。 注意,在大型项目中,为了更好地组织和管理代码,可能会进一步划分头文件和实现,例如将接口和实现分开放在不同的文件夹里,或者使用预处理器宏(`#ifndef`...`#endif`)避免直接包含整个源文件
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值