VS创建多个源文件时遇到的报错的原因和解决方案( LNK2005 main已经在_中定义和 LNK2005 找到一个或多个重定义的符号)

关于VS 2022编写多个源文件的问题


文章目录

  • 关于VS 2022编写多个源文件的问题
  • 一、问题原因
  • 二、解决方法
    • 1、常规解决方案
    • 2、通过直接选择启动项(需新建项目)
    • 3、直接对源文件进行设置(无需新建项目)
    • 4、通过更改其他源文件的主函数
  • 三、进一步解释
    • 1、能否创建多个源文件?
    • 2、为什么一个项目中不能有多个main函数
  • 总结


出现的问题如下图:

VS创建多个源文件时遇到的报错的原因和解决方案( LNK2005 main已经在_中定义和 LNK2005 找到一个或多个重定义的符号)_第1张图片


注意:有时主函数可能是其他函数,而不是‘main’函数,本文中的main函数指的都是主函数

一、问题原因

这个错误的原因就是一个源文件中有多个main函数,学过C语言的人都知道,main是主函数,是一个程序的入口,但是同一个项目中不能出现多个main函数入口。

二、解决方法

1、常规解决方案

源文件中只保留一个main函数就可以解决问题

以下方法均是在迫不得已的情况下使用,如果是非迫不得已,还是建议一个项目只保留一个拥有主函数入口的源文件

2、通过直接选择启动项(需新建项目)

①右击解决方案,选择“添加”,点击“新建项目”

VS创建多个源文件时遇到的报错的原因和解决方案( LNK2005 main已经在_中定义和 LNK2005 找到一个或多个重定义的符号)_第2张图片

②正常创建好项目后,新项目会直接创建在此解决方案下,然后在源文件下创建新的文件(和平常创建的方式一样)

不会创建项目的可以去学习软件的使用方法(本文使用 VS 2022 | 前后版本区别不大):

文章链接,可以直接点击进入

VS创建多个源文件时遇到的报错的原因和解决方案( LNK2005 main已经在_中定义和 LNK2005 找到一个或多个重定义的符号)_第3张图片

③右击你希望运行的项目(project),点击选择“设为启动项”

VS创建多个源文件时遇到的报错的原因和解决方案( LNK2005 main已经在_中定义和 LNK2005 找到一个或多个重定义的符号)_第4张图片

④此时在运行,就是设置的项目被执行了

3、直接对源文件进行设置(无需新建项目)

①右击源文件中需要排出的文件,点击“属性”

VS创建多个源文件时遇到的报错的原因和解决方案( LNK2005 main已经在_中定义和 LNK2005 找到一个或多个重定义的符号)_第5张图片

②在从生成中排除后的选项中选择 “是”,然后点击“确定”

VS创建多个源文件时遇到的报错的原因和解决方案( LNK2005 main已经在_中定义和 LNK2005 找到一个或多个重定义的符号)_第6张图片

③此时在运行项目,你就会发现加红点的源文件不在运行

VS创建多个源文件时遇到的报错的原因和解决方案( LNK2005 main已经在_中定义和 LNK2005 找到一个或多个重定义的符号)_第7张图片

此方法对多个源文件时(超过两个)均使用

4、通过更改其他源文件的主函数

将主函数进行改变,这样程序既不会运行这个源文件,也不会报错

但主函数依然是main函数,没有对主函数本身进行修改

VS创建多个源文件时遇到的报错的原因和解决方案( LNK2005 main已经在_中定义和 LNK2005 找到一个或多个重定义的符号)_第8张图片

此方法不适合于学校交作业,因为本身代码就是错误,没有正确使用主函数

三、进一步解释

1、能否创建多个源文件?

答案是肯定的,当然可以创建多个源文件,在软件工程中,如果开发一个应用,总会创建多个源文件,但对于初学者,创建多个源文件,可能是为了开发多个应用。

也就是说创建的每一个 “.c文件” 都可以运行,相当于每一个 “.c文件” 都是一个程序,都是一个独立的App,但是不可能实现,尤其是在软件工程中。有些同学可能会说,为什么有些老牌的开发软件允许同一个项目可以有多个main函数,因为时代在变化,以前的标准对于现在已经不在适用,我们所做的应该是积极学习新的规则,这样才不会被时代抛弃。

即最终的可执行文件只能有一个main函数作为入口点。这种设计并不是语言级别的规定,而是项目组织和构建系统的一种实践。在现代的软件开发中,为了代码的清晰性和可维护性,通常还是建议只有一个主入口点。

2、为什么一个项目中不能有多个main函数

在许多编程语言中,一个项目只能有一个主函数(通常是“main”函数)。这是因为主函数是程序的入口点,操作系统在运行程序时会从这里开始执行。如果一个项目中有多个主函数,操作系统会困惑不知道从哪个函数开始执行,这会导致程序的行为不确定。

在C语言中,一个程序只能有一个“main”函数。例如:

int main() {
    // 主函数的代码
    return 0;
}

在Java中,也只能有一个“main”方法:

public class MainClass {
    public static void main(String[] args) {
        // 主方法的代码
    }
}

在其他语言中也有类似的规定,一个项目中只有一个入口点有助于确保程序的执行流程是可控的,并且可以提高代码的清晰性和可维护性。

如果有多个功能点需要执行,通常会在一个主函数中调用其他函数或模块。这样可以实现代码的模块化和组织,使程序更易于理解和维护。如果你有多个独立的程序,可以将它们分别编写为不同的项目或模块,并在需要时单独运行它们。


总结

本文着重解释了当使用VS创建多个源文件时出现报错( LNK2005 main已经在_中定义和 LNK2005 找到一个或多个重定义的符号)的原因,以及介绍了四种如何在同一个项目中创建多个主函数并且可以独立运行的方法,以便于大家在解决问题的前提下更好的满足其他需求。

感谢大家的观看,如果对本系列文章感兴趣的朋友也请多多点赞分享,收藏关注不迷路,如有疑问可以在文章下方评论或者直接私聊我,我会在第一时间回复大家,大家的支持也是我第一动力。

你可能感兴趣的:(#,VS,2022,visual,studio,ide,c++,c语言)