提问人:Jsp1304 提问时间:10/13/2012 最后编辑:Giacomo PirinoliJsp1304 更新时间:5/9/2023 访问量:60056
“Main”的多种定义
Multiple definitions of "Main"
问:
在学习 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++ 页面上,所以我猜这是一个编译器错误。
有人可以给我指出正确的方向,为什么会发生这种情况以及导致此错误的原因是什么?
答:
“main”的多个定义表明你对main有另一个定义。也许在项目的另一个 .c 或 .cpp 文件中。您只能有一个具有相同名称和签名(参数类型)的函数。此外,main 非常特殊,因此在项目中只能有一个 main 函数用作入口点(没有参数,一个 int 或一个 int 和一个 char**)。
P.S. 从技术上讲,这是一个链接器错误。这是一个微妙的区别,但基本上它抱怨链接器无法确定哪个函数应该是入口点,因为有多个具有相同名称的定义。
评论
发现我的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*************
],
当我练习CMake时,我遇到了同样的问题。最后,我发现 cmakelist 项目中设置的源代码路径不正确。因此,编译的文件包括 CMake 执行期间生成的许多重复文件。因此,发生了编译错误
您出现此类错误的原因是您可能在此操作项目中多次使用了 main 函数。它可能位于您显示的文件或项目中的其他文件中。因此,您必须找到使用主要功能的位置并删除它们。请记住,只需要一个主函数。
评论
c++ x.cc x.cc -o x