为什么我得到“未定义的 main 引用”

新手上路,请多包涵

我是编程新手,有一个非常基本的问题,可以在其他线程中回答,但我认为它们太先进了,我无法理解。到目前为止,我实际上已经在这个网站上找到了很多答案,但这是迫使我创建一个帐户并询问的第一个问题。无论如何,我正在 linux mint 18.3 上运行一个非常基本的示例程序。现在我已经看到这个确切的代码可以在装有 Windows 8 的机器上运行,所以我想知道这是否是问题所在。我创建了一个类,当我插入我的对象然后构建并运行时,我得到:

/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/crt1.o||在函数 _start':| (.text+0x20)||undefined reference to main’|

这是整个代码:

 #include <iostream>
#include "Gladius.h"
using namespace std;

int main()
{
    Gladius io;
    return 0;
}

那是非常基本的。这是.h

 #ifndef GLADIUS_H
#define GLADIUS_H

class Gladius
{
    public:
        Gladius();

};

#endif // GLADIUS_H

和班级的.cpp。

 #include "Gladius.h"
#include <iostream>

using namespace std;
Gladius::Gladius()
{
    cout << "The Gladius is a short sword" << endl;
}

我知道这看起来非常简单,但我只是在学习编码,我一直在寻找解释为什么这不起作用但我看到它在另一台电脑上完全正常工作。无论如何,任何解释将不胜感激。

这是我在命令行中找到的如果这回答了您关于 cmd 中的内容的问题。

g++ -Wall -fexceptions -g -std=c++11 -Wall -I -c /home/gator/Documents/Spartan1/Gladius.cpp -o obj/Debug/Gladius.o /usr/lib/gcc/x86_64- linux-gnu/5/../../../x86_64-linux-gnu/crt1.o:在函数 _start': (.text+0x20): undefined reference to main’collect2:错误:ld返回1退出状态

原文由 Seaxneat 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1k
1 个回答

您的编译器的命令行包含 -I -c 序列。

这个 -I 选项“吞噬”了你的 -c 选项。 -I 需要一个附加参数,即包含目录名称。您未能提供该参数,这就是为什么 -I 假定 -c 是目录名称。所以 -I 消耗了 -c

编译器永远不会看到 -c 。如果没有 -c 它假定您要编译 和链接 您的程序。由于 Gladius.cpp 没有 main ,因此在链接阶段会出现错误。

这是相同问题的简单演示:http: //coliru.stacked-crooked.com/a/8a37cd3e90a443e2

你需要弄清楚为什么你的命令行中有一个孤立的 -I

原文由 AnT stands with Russia 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题