2

在设计头文件后,我正在尝试编译从电子书中获得的类的主体,但我收到以下错误消息:

[链接器错误] c:/crossdev/src/mingw-w64-svn/mingw-w64-crt/crt/crt0_c.c:18: 未定义对“WinMain@16”的引用

文件:C:\Users\Chuks Joe\Desktop\collect2.exe

消息:[错误] ld 返回 1 个退出状态

头文件位于一个名为 dice.h 的单独文件中,类主体位于另一个名为 dice.cpp 的单独文件中。客户端程序也在一个名为 testdice.cpp 的单独文件中。

我如何安排这些文件以及将 .so 文件放在哪里,以便它们都可以链接在一起以便我的程序运行。

我使用的编译器是Dev-C++

4

2 回答 2

0

不看代码很难分辨。您可以在这篇文章中查看链接器的工作原理。在您的情况下,错误很可能来自以下之一:

  • 您正在尝试使用在头文件中声明的函数或方法,但忘记在源文件中定义。
  • 您只使用目标文件调用链接器,testdice而忘记了dice.
  • 未定义的函数是你的吗?如果没有,您很可能需要将外部库添加到链接器。

要缩小范围,请尝试使用testdice.cpp. 如果这导致更多的链接器错误,那么您很可能没有将所有内容链接在一起。如果它没有增加更多的错误,你很可能忘记定义函数,或者原型在源文件和头文件中略有不同。

于 2013-03-21T19:00:21.197 回答
0

为了使您的代码可链接为可执行文件,它必须具有main()(或WinMain()用于 GUI 程序)入口点。在 C++ 中,一个类本身并不是一个完整的程序——执行从main()函数开始。

出于某种原因,即使对于非 GUI 应用程序,MinGW 链接器也会抱怨缺少WinMain()而不是main()解决链接。

您通常必须提供main()orWinMain()函数,但当您使用在内部提供它的应用程序框架(通常是 GUI)时例外。

在大多数情况下,要使用一个类,您必须实例化该类的一个对象并通过该实例调用其成员函数。静态成员函数不需要对象实例。

例子:

// main.cpp
#include <iostream>
#include "dice.h"

int main()
{
    cDice myDie ;
    std::cout << "Throw = " << myDie.roll() ; 
}
于 2013-03-21T19:13:15.310 回答