`没有main()的Cpp类中对`main`的未定义引用

Suv*_*yil 6 c++ g++

我试图找到答案时遇到了这个问题.但似乎海报有多个文件,而且它们没有被链接,因而错误.

但是,为什么在使用单个文件时会出现此错误?

g++ myClass.cpp  
/usr/lib/gcc/i686-redhat-linux/4.6.3/../../../crt1.o: In function `_start':
(.text+0x18): undefined reference to `main'
collect2: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)

为什么main在编译时需要这里(从哪里可以看到我的代码中提到main)?main是代码执行的起点,但为什么编译器假设我需要一个main.我可以在其他文件中定义它并用于gcc -o制作可执行文件吗?

或者我可能在代码中遗漏了导致错误的其他内容?

#include<iostream>
class myClass
{

public:
myClass()
{
    std::cout<<"Constructor";
}

~myClass()
{
    std::cout<<"Destructor";    
}

};
Run Code Online (Sandbox Code Playgroud)

jua*_*nza 8

您正在尝试编译可执行文件,因此需要一个main函数.您应该使用-c标志编译目标文件:

g++ -c myClass.cpp
Run Code Online (Sandbox Code Playgroud)

当你在这里时,我建议-Wall -Wextra至少添加警告标志.


Mat*_*son 8

main没有必要编译源文件.有必要将程序链接到可执行文件[1],因为程序必须从某个地方开始.

你需要告诉编译器"这不是我的整个程序,只是编译,但不要链接",使用'-c'选项,所以

g++ -c myClass.cpp
Run Code Online (Sandbox Code Playgroud)

这将生成一个myClass.o文件,您可以稍后使用,例如

g++ -o myprog myClass.o myOtherClass.o something_that_has_main.o -lsomelib
Run Code Online (Sandbox Code Playgroud)

(显然,用项目中的任何内容替换名称)

[1]假设您使用编译器附带的常规链接器scrips.还有"解决方法",但我认为这超出了这个答案.