“Main”的多种定义

Multiple definitions of "Main"

提问人:Jsp1304 提问时间:10/13/2012 最后编辑:Giacomo PirinoliJsp1304 更新时间:5/9/2023 访问量:60056

问:

在学习 C++ 的旅程中,我正在通过实际网站上的 C++ 手册进行学习。我正在使用 DevC++ 并遇到了问题,不知道这是否是编译器错误。

我一点一点地在自己中输入这段代码,因为我觉得它更有效率,并添加我自己从示例中学到的东西,然后我开始初始化变量。这是 C++ 手册中的代码

#include <iostream>

using namespace std;
int main ()
{
    int a=5;     // initial value = 5
    int b(2);    // initial value = 2
    int result;  // initial value undetermined

    a = a + 3;
    result = a - b;
    cout << result;

    return 0;
}

这会弹出一个编译器错误,提示“”Main“的多个定义” 现在这是在实际的 C++ 页面上,所以我猜这是一个编译器错误。

有人可以给我指出正确的方向,为什么会发生这种情况以及导致此错误的原因是什么?

C++语言

评论

1赞 10/13/2012
您的项目中是否有多个文件,而另一个文件也包含一个 main?通常这些错误消息是不言自明的。
2赞 chris 10/13/2012
您说的是哪个实际站点上的 C++ 手册?
1赞 10/13/2012
如果您的项目中没有多个文件,您是否可能会多次编译此单个文件?(从命令行,会这样做。c++ x.cc x.cc -o x
0赞 CrazyCasta 10/13/2012
@hvd dev-c++ 是一个 IDE: bloodshed.net/devcpp.html 所以我怀疑他两次链接同一个文件。(还有一个相当旧的,运行 gcc 3.4.2)
0赞 john 10/13/2012
这不是 C++ 错误,代码看起来不错。此错误是因为您错误地使用了 DevC++。您如何设法在“项目”中包含两个主要功能。也许你还在编译你以前做过的程序?

答:

10赞 CrazyCasta 10/13/2012 #1

“main”的多个定义表明你对main有另一个定义。也许在项目的另一个 .c 或 .cpp 文件中。您只能有一个具有相同名称和签名(参数类型)的函数。此外,main 非常特殊,因此在项目中只能有一个 main 函数用作入口点(没有参数,一个 int 或一个 int 和一个 char**)。

P.S. 从技术上讲,这是一个链接器错误。这是一个微妙的区别,但基本上它抱怨链接器无法确定哪个函数应该是入口点,因为有多个具有相同名称的定义。

评论

1赞 10/13/2012
他可以通过评论此主键并按 F10 键进入另一个主键轻松找到另一个主键
1赞 Jsp1304 10/13/2012
谢谢大家,我没有意识到在dev-cpp中,在项目文件夹中,当我尝试编译我正在处理的一个页面时,另一个文件中的main也必须与它分开,所以一旦我从项目文件夹中删除了其他页面,它就起作用了!
1赞 LeonTheProfessional 2/3/2021
如果您将 CMAKE 与 GLOB_RECURSE 模式一起使用,请确保您的构建文件夹位于该模式所处理的文件夹之外。我碰巧从 cmake-build-folder 中包含一个中间的“*.c”文件。
2赞 Jim Stokes 11/25/2021 #2

发现我的tasks.json文件中有两个文件引用导致此错误,我花了很长时间才弄清楚。希望这对其他人有所帮助......请参阅下面的“这里*****”:

     "-I/usr/include/glib-2.0",
            "-I/usr/lib/x86_64-linux-gnu/glib-2.0/include",

        //"${file}",           //HERE**********************

            "-lgtk-3",
            "-lgdk-3",
            "-lpangocairo-1.0",
            "-lpango-1.0",
            "-lharfbuzz",
            "-latk-1.0",
            "-lcairo-gobject",
            "-lcairo",
            "-lgdk_pixbuf-2.0",
            "-lgio-2.0",
            "-lgobject-2.0",
            "-lglib-2.0",
        "-o",
        "${fileDirname}/${fileBasenameNoExtension}" //HERE*************

        ],
-1赞 we5372 9/24/2022 #3

当我练习CMake时,我遇到了同样的问题。最后,我发现 cmakelist 项目中设置的源代码路径不正确。因此,编译的文件包括 CMake 执行期间生成的许多重复文件。因此,发生了编译错误

0赞 amin mohebzadeh 5/8/2023 #4

您出现此类错误的原因是您可能在此操作项目中多次使用了 main 函数。它可能位于您显示的文件或项目中的其他文件中。因此,您必须找到使用主要功能的位置并删除它们。请记住,只需要一个主函数。