C++代码::块中对WinMain @ 16的未定义引用

9

我正在使用Code::Blocks学习C++,每次尝试创建新的类时,都会收到一个错误消息:

undefined reference to `WinMain@16'

以下是我一直在使用的代码:

主类

#include "Lime.h"
#include <iostream>
using namespace std;
int main()
{
    Lime lime;
    return 0;
}

石灰班级(.ccp):
#include "Lime.h"
#include <iostream>
using namespace std;
Lime::Lime()
{
    cout<<"Hi!";
}

酸橙头文件(.h):
#ifndef LIME_H
#define LIME_H
class Lime
{
    public:
        Lime();
};
#endif

如果有人知道如何解决这个问题,请告诉我!

你必须自定义链接从两个编译的.cpp文件创建的两个目标文件,或者将这些文件放入一个项目中。 - chris
1
我不知道Codeblocks,但是你需要启用子系统CONSOLE。 - drescherjm
@drescherjm,不,那与问题无关。请参见此答案 - chris
1
所有这些文件都已经在同一个项目中创建了,问题只是通过重新启动CodeBlocks解决了,你知道为什么吗? - Relopz
1
简单来说,你需要创建一个“控制台应用程序”,而不是一个“Win32 GUI 项目”。 - enhzflep
显示剩余3条评论
11个回答

10

我在做与这篇教程完全相同的内容时,也遇到了完全相同的问题。

如何解决? 我发现重新启动CodeBlocks可以摆脱这个错误。这与您创建文件的方式或语法无关。重新启动即可。

为什么会出现这种情况? 如果我不得不猜测,我认为CodeBlocks确实会创建头文件和cpp文件,但是它没有以使它们可用的正确方式将它们链接到您的项目中(尽管它在创建后要求您将它们链接到项目中)。这只是一个猜测。

我知道一些人评论说您正在创建Windows GUI控制台应用程序而不是控制台应用程序,但事实并非如此。我也是在Bucky的视频中创建一个简单的控制台应用程序。


1
这对我来说是正确的答案。CodeBlocks在一个编译正常的项目上突然开始抱怨WinMain。重新启动解决了问题。 - Jong Bor Lee
1
太棒了!我正在做完全相同的事情,按照完全相同的教程,使用完全相同的程序,并且遇到了完全相同的问题,而这个完全相同的解决方案起作用了。谢谢! - The Duke Of Marshall שלום
很高兴我能帮到你! - user3308043

9
尝试这样做: 设置->编译器,点击选项卡构建选项,选择复选框

显式添加当前正在编译的文件目录到编译器搜索目录中

P.S.

下次创建新类时,在文件策略部分,请确保选择复选框

  • 添加路径到项目

  • 头文件和实现文件应在同一个文件夹中

但是,不要选择

使用相对路径


1
我和楼主遇到了同样的问题,这个方法解决了它,谢谢。 - FreddieGericke
1
最终得到了一个简单明了且不费心的答案!! - steoiatsl

3

在菜单栏中选择"项目" --> "构建选项 . . ."
转到"链接器设置"选项卡
"链接库"面板中,点击"添加"
在弹出的字段中输入:mingw32;libSDL.a;libSDLmain.a
转到"搜索目录" --> "链接器"选项卡
在此添加你的MinGW库文件夹!祝你好运!


2
看起来你正在构建一个Windows应用程序,而不是控制台应用程序。因此,你需要一个WinMain函数作为程序入口点,而不是main
我对CodeBlocks不是很熟悉,但在项目设置中,有一个设置可以让你指定程序运行的子系统。它可能会说“Windows”,其中一个选项应该是“Console”,所以如果你真的想要一个控制台应用程序,就可以将其更改为那个选项。根据你使用cout的事实,我怀疑你想要一个控制台应用程序。如果是这样,你可以将main作为入口点。
你也可以在创建新项目时选择控制台应用程序。这个截图和文本应该有所帮助。
注意:我刚刚检查了一些内容,在Project/target option中,你可以进入“Build targets”选项卡,查看你正在构建的子系统。它在选项卡上称为“Type”,其中一个下拉选项将是“控制台应用程序”。

2
我选择了“控制台应用程序”,在目标选项中它显示为“控制台应用程序”。 - Atom

1
这个问题出现是因为项目中没有包含"main.cpp"文件。如果你再次看到这个错误,请确保你的项目中包含所有文件。

0
我也遇到了这个问题! 问题在于我将我的主函数放在了一个特定的命名空间下,而我的类不属于这个命名空间,看起来就好像它们没有“main”函数一样。当我移除了命名空间/将类添加到相同的命名空间中后,构建问题就解决了。

0
我已经解决了这个问题,只需要打开编译器设置对话框并点击确定即可。没有任何变化。而且它真的有效!
但是如果你再次添加一个新类,这个问题就会重复出现。所以,每次创建一个新类时,只需打开/关闭设置对话框即可。

刚刚尝试了与我的建议相邻的建议:“尝试这样做:设置->编译器,单击“构建选项”选项卡,选择复选框”-必须设置此标志。 - Sergey Dolgopolov

0

这非常简单,对我很有效...你所要做的就是选择“打开现有项目”,它会在你打开Code Blocks时出现在开始选项卡中,然后选择(你的项目名称)。cbp文件...程序将打开你的项目以及类名.h和.cpp文件...你构建并运行...然后你的代码就可以正常工作了。


不幸的是,事情并没有那么简单。 - asgs

0

我之前也遇到过这个问题,我的解决方案是如果你有很多包含头文件的文件,就创建一个项目。这样,当你编写 #include "Burrito.h" 时,编辑器会在你的项目中查找头文件。特别是对于 Dev-cpp 编辑器。


-1

修复:CodeBlocks中的undefined reference to `WinMain@16'或undefined reference to 'class-name::class-name()'错误

我也遇到了同样的问题。实际上,这很容易解决。在菜单栏中:

项目 --> 构建选项Have g++ follow the C++11 ISO C++ language standard [-std=c++11]上打勾
然后点击确定并构建和运行您的项目[F9]点击此处查看屏幕截图。分离类文件CodeBlocks修复


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