如何在编译Dev C++中的类的主体时解决C++中的链接器错误

问题描述:

我想编译一个类,它是在设计头文件后从我的电子书中获得的一个类的主体,但是出现此错误消息:如何在编译Dev C++中的类的主体时解决C++中的链接器错误

[连接子错误] C:/crossdev/src/mingw-w64-svn/mingw-w64-crt/crt/crt0_c.c:18:未定义参考`的WinMain @ 16'

文件:C:\用户\ Chuks乔\桌面\ collect2.exe

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

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

如何安排这些文件,并在那里做我把.so文件,使他们都可以对我的程序运行联系在一起。

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

+0

开发-C++是不是一个编译器 – 2013-03-21 18:39:24

+0

只要确保你正确地创建了类的CPP的顶部添加#“dice.h” – Jona 2013-03-21 19:00:49

+0

@LightnessRacesinOrbit:不重复,这是一个非常具体的实例,问题在于程序没有“main()”或“winMain()”入口点,因此程序不完整。 – Clifford 2013-03-21 19:18:36

很难说没有看到代码。你可以看看链接器在this post中的工作方式。在你的情况下,错误很可能来自一个:

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

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

对于你的代码可链接作为一个可执行程序,它必须具有(用于GUI程序或WinMain())一main()切入点。一个类本身并不是C++中的完整程序 - 执行从main()函数开始。

由于某些原因,即使是非GUI应用程序,MinGW链接器也会抱怨缺少WinMain()而不是main(),但是两者都将解析链接。

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

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

例子:

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

int main() 
{ 
    cDice myDie ; 
    std::cout << "Throw = " << myDie.roll() ; 
} 
+0

感谢您的帮助至今。 这个班现在正在工作。但是现在出现的新问题是,类实现和试图运行的程序必须在它可以工作之前在同一个文件中。 那么请问,我该怎么办? – 2013-03-27 20:06:07

+0

@ChuksJoeOrjiakor:你应该做的或许是发布一个新问题。但是,您可以通过搜索*“单独编译和链接”*来避免这种情况。 – Clifford 2013-03-28 15:40:36

+0

嗨,老板,我已经完成了你的建议,我会非常感谢你对这篇文章的评论。谢谢 – 2013-04-21 18:28:29