首先发布在这里,因为我坚持使用我精彩的C ++函数。
我得到的错误是链接器错误,如下所示:
main.obj:错误LNK2019:未解析的外部符号“public:void thiscall controls :: printText(int,int,int,int,int,char const *,struct HWND *)”( ?printText @ controls @@ QAEXHHHHHPBDPAUHWND __ @@@ Z)在函数“long stdcall WndProc(struct HWND *,unsigned int,unsigned int,long)”中引用“(?WndProc @@ YGJPAUHWND __ @@ IIJ @ Z)
C:\ Users \ HIDDEN \ Documents \ Visual Studio 2010 \ Projects \ TimedShutdown \ Debug \ TimedShutdown.exe:致命>错误LNK1120:1未解析的外部
基本上我正在尝试创建一个用于创建win32控件和绘制文本的类,并且绘制文本的函数是我的问题发生的地方。
代码如下:
controls.h文件段: -
void printText( int R, int G, int B, int x, int y, LPCSTR text, HWND parent);
controls.cpp段
void printText(int R, int G, int B, int x, int y, LPCSTR text, HWND parent)
{
HDC hdc;
PAINTSTRUCT pss;
hdc = BeginPaint(parent, &pss);
SetBkMode(hdc, TRANSPARENT);
SetTextColor(hdc, RGB(R,G,B));
TextOut(hdc, 30, 20, text, strlen(text));
EndPaint(parent, &pss);
}
main.cpp调用
controls ctrls;
ctrls->printText(255,0,0,300,50,"Test text",hWnd);
我已删除了通话,但错误仍然存在。最初我试图将HDC和PAINTSTRUCT传递给函数,但我在尝试识别错误源时已将其删除。
我完全失去了家伙,我不是一个了不起的C ++程序员,但我正在学习。
批评我,我要求它!
提前感谢您提供的任何帮助,非常感谢:)
答案 0 :(得分:3)
您忘了告诉编译器printText
中的controls.cpp
函数是controls::printText
。因此,编译器仍未定义。
您需要在controls.cpp
修改
// This part is really important
// It tells the compiler which function is defined
// |
// vvvvvvvvvv
void controls::printText(int R, int G, int B, int x, int y, LPCSTR text, HWND parent)
{ // ...
注意:传递给printText的颜色可能是R8G8B8,即每个组件8位。如果我是对的,您应该使用unsigned char
代替int
R
,G
和B
。
答案 1 :(得分:1)
您尚未将controls::
指定给您定义它的函数名称。如果你不这样做,你不能指望它表现得像控件类的成员函数。
试试这个而不是你现在的声明
void controls::printText(int R, int G, int B, int x, int y, LPCSTR text, HWND parent)
{
HDC hdc;
PAINTSTRUCT pss;
hdc = BeginPaint(parent, &pss);
SetBkMode(hdc, TRANSPARENT);
SetTextColor(hdc, RGB(R,G,B));
TextOut(hdc, 30, 20, text, strlen(text));
EndPaint(parent, &pss);
}
编辑:您在问题中提供的代码中并不清楚您实际上是将printText作为控件的成员函数,但是从代码中调用它的方式表明是你打算如何运作。