gcc编辑器中出现“对WinMain @ 16的未定义引用”错误

时间:2018-10-05 17:58:22

标签: c++ gcc codeblocks

我正在学习c ++,并开始看thenewboston的youtube教程。不幸的是,当我使用gcc时,他正在使用Code :: Blocks,并且我无法选择通过单击按钮来创建新的类文件,因此必须手动创建它们。

我不明白为什么Code :: Blocks和gcc中的相同代码将在Code :: Blocks中起作用,但gcc不能。 gcc是否需要针对同一语言的不同编码?

编辑:我已经下载了Code :: Blocksself,并对其进行了测试

其他问题谈论我需要如何为Windows提供入口点,但我不知道该怎么做。

Test.cpp代码:

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

int main() {
  ClassTest bo;
}

ClassTest.h代码:

#ifndef CLASSTEST_H
#define CLASSTEST_H

class ClassTest {
  public:
      ClassTest();
};

#endif // CLASSTEST_H

ClassTest.cpp代码:

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

ClassTest::ClassTest() {
  cout << "blah blah" << endl;
}

1 个答案:

答案 0 :(得分:0)

我不太确定我是否明白问题所在;我将其理解为“如何将这三个文件构建为可以从Windows命令行运行的.exe?”

答案是在包含文件的文件夹中的命令行上运行以下内容:

g++ -c Test.cpp -o Test.o
g++ -c ClassTest.cpp -o ClassTest.o
g++ Test.o ClassTest.o -o Test.exe

前两个命令将每个CPP文件构建为一个“目标文件”,该文件本身不是一个完整的程序,但包含该CPP文件中代码的编译版本。最后一条命令告诉编译器将两个目标文件粘贴到一个程序中,并解决它们之间的所有交叉引用。 (例如,Test.cpp构造ClassTest对象的部分最终需要从ClassTest.cpp调用ClassTest构造函数代码。)

Code :: Blocks是一个IDE,可以弄清楚如何在项目中构建每个源文件,以及如何将它们自身链接在一起。但是,如果您不使用IDE,则需要以其他方式进行。您可以像这样手动进行操作,也可以编写Makefile来检查哪些代码文件已更改,并在运行make命令时重新构建并重新链接依赖于它们的所有内容。大多数人是这样做的。

至于“为Windows提供入口点”,可能是指要在屏幕上显示窗口的GUI应用程序。对于您编写的控制台程序,“入口点”为main(),您只需将内容打印到命令行窗口即可。要制作自己的实际Windows风格的GUI窗口,您需要使用Windows API,我不会告诉您太多。