【问题标题】:undefined reference to WinMain@16 (codeblocks)未定义对 WinMain@16 的引用(代码块)
【发布时间】:2013-11-16 15:48:25
【问题描述】:

当我编译我的 secrypt.cpp 程序时,我的编译器显示错误“undefined reference to WinMain@16”。 我的代码如下

secrypt.h:

#ifndef SECRYPT_H
#define SECRYPT_H

void jRegister();

#endif

secrypt.cpp:

#include<iostream>
#include<string>
#include<fstream>
#include<cstdlib>
#include "secrypt.h"

using namespace std;

void jRegister()
{
    ofstream outRegister( "useraccount.dat", ios::out );
    if ( !outRegister    ) {
    cerr << "File could not be opened" << endl;
    exit( 1 );}
    string a,b,c,d;
    cout<<"enter your username :";
    cin>>a;
    cout<<"enter your password :";
    cin>>b;
    outRegister<<a<<' '<<b<<endl;
    cout<<"your account has been created";

}

试用.cpp

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

using namespace std;

int main()
{
    void jRegister();

    return 0;
}

这是我的错误的图像: errorimage

当我编译我的 trial.cpp 程序时,它编译并打开控制台,但没有调用该函数。这是 trial.cpp 程序的控制台屏幕图像。 o/p screen 谁能帮我解决这个问题?

【问题讨论】:

  • 你永远不会编译和链接trial.cpp
  • 编译为控制台模式程序。
  • @Max,可能是。
  • 它查找 GUI 程序。它不查找 main(),而是查找 WinMain。将您的项目属性更改为控制台程序
  • @AlexandreTryHardLeblanc,图片显示没有项目。 WinMain 即使是 Win32 GUI 项目也不需要。

标签: c++ windows codeblocks


【解决方案1】:

当没有项目时,Code::Blocks 只编译和链接当前文件。从您的图片来看,该文件是secrypt.cpp,它没有主要功能。为了编译和链接这两个源文件,您需要手动完成或将它们添加到同一个项目中。

与其他人所说的相反,使用带有main 的 Windows 子系统仍然可以工作,但不会有控制台窗口。

您的其他尝试,仅编译和链接trial.cpp,从不链接secrypt.cpp。这通常会导致对jRegister() 的未定义引用,但是您已经在main 中声明了该函数,而不是调用它。将main 更改为:

int main()
{
    jRegister();

    return 0;
}

【讨论】:

  • 我按照你说的尝试了......但它显示错误。 "未定义对 'jRegister()' 的引用
  • @JefreeSujit,您必须将两个源文件放入同一个项目中,以便它们都链接。或者,从命令行自己编译和链接它们。那是我的第一段。
  • @JefreeSujit,单击新项目,您可能想要一个控制台应用程序项目,将现有文件添加到该项目,然后构建项目。更多详细信息可以在 C::B wiki 上找到。可以在 GCC(或您使用的任何编译器)文档中找到有关如何手动执行此操作的详细信息。
【解决方案2】:

好吧,我知道这个答案不是经验丰富的程序员的方法,也不是老 IT 顾问的方法,但它对我有用。

答案是“尝试打开和关闭它”。 重新启动代码块,它运行良好 让我想起了 2006 年的喜剧节目 It Crowd。

【讨论】:

  • +1 乍一看我认为这真的很愚蠢,但最终对我来说,重新启动代码块解决了我的问题!应该先试试这个:)
【解决方案3】:

当我遇到以下错误时,我对为代码块设置图形很感兴趣:(花了我 2 小时来解决它)

我想你需要有一点运气。就我而言,我只是更改了设置菜单->编译器和调试器->全局编译器设置->链接器设置->其他链接器选项中的内容顺序: 工作顺序是: -lmingw32 -lSDL -lSDLmain

【讨论】:

    【解决方案4】:

    您应该在 Code::Blocks 中创建一个新项目,并确保它是“控制台应用程序”。

    将您的 .cpp 文件添加到项目中,以便将它们全部编译并链接在一起。

    【讨论】:

      【解决方案5】:
      1. 您需要打开程序的项目文件,它应该会出现在管理面板上。

      2. 右键单击项目文件,然后选择添加文件。您应该添加 3 个源代码(secrypt.h、secrypt.cpp 和 trial.cpp)

      3. 编译并享受。希望能帮到你。

      【讨论】:

        【解决方案6】:

        打开你要添加的项目。

        右键单击名称。 然后选择,在活动项目中添加。 然后cpp 文件将获得指向cbp 的链接。

        【讨论】:

          【解决方案7】:

          嘿,我遇到了类似的问题,所有文件都在同一个项目中,但它仍然没有将它们编译在一起。这就是我所做的

          在左侧面板的 Workspace 区域中,您可以看到您的项目名称和其中的文件。 右键单击项目名称并单击重建。 仅此一项就帮助我,从头开始重新构建您的项目。

          【讨论】:

            【解决方案8】:

            对 WinMain@16" Visual Studio 的未定义引用 如果您使用的是 Visual Studio Code,那么 1)设定 2)搜索保存 3)向下滚动并搜索代码运行器 4)选中复选框“运行前保存文件 5)现在运行

            【讨论】:

              【解决方案9】:

              我在使用 Code Blocks rev 13.12 时遇到了同样的错误问题。 我在这里可能错了,因为我不是初学者:)

              我的问题是我不小心在 Main() 中大写了“M”而不是 ALL 小写 = main() - 一旦更正,它就起作用了!!!

              我注意到您使用的是“int main()”而不是“main()”。是这个问题,还是应该是这样?

              希望我能帮上忙……

              【讨论】:

              • 从 OP 的帖子中可以清楚地看出它是 main,带有小写的“m”。此外,没有intmain() 是完全错误的在C++ 中。也不推荐在 C 中使用。
              猜你喜欢
              • 2015-06-06
              • 1970-01-01
              • 2020-07-30
              • 2021-11-18
              • 2013-01-15
              相关资源
              最近更新 更多