编译c++时对main的未定义引用

Undefined reference to main when compiling c++

本文关键字:未定义 引用 main c++ 时对 编译      更新时间:2023-10-16

我正在尝试编译我的类,但我得到以下错误

/usr/lib/gcc/x86_64-redhat-linux/4.8.2/../../../../lib64/crt1.o: In function `_start':
   (.text+0x20): undefined reference to `main'
    collect2: error: ld returned 1 exit status
    make: *** [try] Error 1

但是,我在一个叫做Hash.cpp的类中包含了一个main函数。下面是makefile:

C++ = g++
CFLAGS = -c -g
all: hash                                                                               
hash: Hash.o ML_hash.o
        $(C++) -o hash Hash.o ML_hash.o
%.o: %.cpp
        $(C++) $(CFLAGS) $*.cpp

当我调用"make clean"answers"make"时,仍然会生成输出的可执行文件"hash"。如果Hash.cpp在makefile中列出并包含一个main函数,为什么我得到下面的错误?

编辑:

对不起…我想说的是main函数。下面是主类:

#include "HashNode.h"
#include "MLH_back1.h"
#include <iostream>
using std::cout;
using std::endl;
int main()
{
    doStuff();
}

如果我没有发布足够的代码,我很抱歉。通常当我问问题的时候,我试着把我认为问题发生的地方贴出来,所以只列出相关的信息,而不是我所有的课程。通过说"我有一个主函数",我的意思是说我确实在一个名为Hash.cpp的类中编写了一个主函数。我只是试图得到一个概念性的理解,为什么这个错误会发生,当我有一个主函数。我已经看了其他问题,所以我不想重复。

但是,我确实在一个名为Hash.cpp的类中包含了一个主类

在c++中,你需要有一个main函数,而不是像在其他OOP语言中那样在类中有一个类或方法。

这是程序的入口点。这是不太公平的,因为在调用main函数的地方为您做了一些预处理,但这是您编写的条目。

最普通的c++程序是这样的:
int main() { return 0; }

如果出现相同的错误,则很可能您混淆了32位和64位,在这种情况下,"入口"点也可能出现此类问题。