如何在编译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++。
很难说没有看到代码。你可以看看链接器在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() ;
}
感谢您的帮助至今。 这个班现在正在工作。但是现在出现的新问题是,类实现和试图运行的程序必须在它可以工作之前在同一个文件中。 那么请问,我该怎么办? – 2013-03-27 20:06:07
@ChuksJoeOrjiakor:你应该做的或许是发布一个新问题。但是,您可以通过搜索*“单独编译和链接”*来避免这种情况。 – Clifford 2013-03-28 15:40:36
嗨,老板,我已经完成了你的建议,我会非常感谢你对这篇文章的评论。谢谢 – 2013-04-21 18:28:29
开发-C++是不是一个编译器 – 2013-03-21 18:39:24
只要确保你正确地创建了类的CPP的顶部添加#“dice.h” – Jona 2013-03-21 19:00:49
@LightnessRacesinOrbit:不重复,这是一个非常具体的实例,问题在于程序没有“main()”或“winMain()”入口点,因此程序不完整。 – Clifford 2013-03-21 19:18:36