关于《error: 函数“int main(void)”已有主体》的错误

编译器:VC++2010

#include <iostream>
#include <string>
#include <Windows.h>

using namespace std;

//定义“人类”
class Human {
   
public: //公有的, 公共的
	void eat(); //类里面的方法,又称为成员函数
	void sleep();
	void work();
### 关于C/C++中`main`函数已存在主体的意义解释 当遇到错误提示 `error C2084: 函数int main(void)”已有主体` 时,意味着程序中有两个地方定义了同名的 `main` 函数[^2]。这种情况违反了一条重要的编程原则——单一定义规则 (One Definition Rule, ODR),即在一个翻译单元内不允许重复定义相同的实体。 #### 单一定义规则的影响 在C++标准下,ODR规定任何给定的对象、函数或模板实例在同一程序的不同部分都应具有唯一定义。对于全局作用域内的非内联命名函数而言,在整个项目范围内也只允许有一个定义版本。因此,如果多次定义了 `main` 函数,则会触发上述编译期报错[^4]。 #### 常见原因分析 通常情况下,这种问题的发生可能源于以下几个方面: - **重复包含头文件**:如果不慎将含有完整 `main` 实现的源码片段通过预处理指令(如 `#include`)引入到其他多个源文件中,那么最终链接阶段将会检测到冲突。 - **宏替换失误**:某些时候开发者可能会利用宏定义来动态调整代码逻辑,但如果操作不当也可能造成意外的结果,比如不小心展开了另一个完整的 `main` 定义副本。 - **库文件污染**:第三方静态/共享库内部包含了自身的入口点而未妥善隔离,这同样会在应用程序构建过程中引发类似的矛盾。 为了防止此类情况发生,建议遵循良好的编码实践,确保每个 `.cpp` 文件独立维护各自的实现细节,并且合理运用模块化设计思路减少不必要的依赖关系。 ```cpp // 正确的做法是在单个 .cpp 文件中定义 main() #include <iostream> int main() { std::cout << "Hello World!" << std::endl; return 0; } ```
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值