链接错误:*.obj 中已定义了 _main。

5
以下是代码结构:

ArrayStack.h

#ifndef ARRAY_STACK_H
#define ARRAY_STACK_H
#include "Array.h"
// class ArrayStack
#endif

ArrayStack.cpp

#include "ArrayStack.h"
// ArrayStack's methods

Array.h

#ifndef ARRAY_HEADER
#define ARRAY_HEADER
#include <iostream>
// class Array
#endif

Array.cpp

#include "Array.h"
// Array's methods

main.cpp

#include "ArrayStack.h"
int main() {
    return 0;
}

产生以下错误:

LNK1169 找到一个或多个重复定义的符号

LNK2005 _main 已在 Array.obj 中定义

问题是什么? 请注意,当第一次将 Array.cpp 包含在项目中时,它确实在自身中定义了 int main(),但现在已经没有了(ArrayStack.cpp 也没有)。此外,当省略 main.cpp 中的 int main() 时,代码编译得很好...

2
可能存在一个包含 main 函数的旧目标文件。清理项目以便重新编译所有内容。 - Anon Mail
@AnonMail 我尝试了“清理解决方案”选项,甚至手动删除了.obj文件,但是仍然没有改变... - Stefan Stanković
也许旧的 Array.obj 被放置在你正在链接的库中?不知何故,它说它包含在 Array.obj 中。 - Anon Mail
再次删除所有的 .obj 文件。然后打开命令提示符,导航到解决方案文件夹的根目录,并使用 dir /b /s *.obj 查看您可能错过的内容。如果您没有错过任何内容,那么我就没有答案。因此这是一条注释。 - user4581301
1个回答

4
这个错误信息意味着在所有已编译的代码(*.obj文件)中,链接器发现了不止一个main()函数。其中一个显然在main.cpp中。
首先想到的解决方案是(强制)通过某种方式删除*.obj文件来重新编译。
当这些方法都无法改变任何东西时,请尝试从头开始单独重建您的解决方案。从main.cpp开始,不包括include文件。然后逐个添加文件,确信您不会出现错误。也许在某些情况下,您必须注释掉某些行以使编译变得可能。

1
我在你发帖之前从头开始重新构建了它,似乎Array.cpp文件包含的内容和解决方案资源管理器中的Array.cpp文件不一样(被包含的那个仍然有int main())。 - Stefan Stanković

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接