1

第一次在这里发帖,因为我坚持使用我美妙的 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 : 致命 >error LNK1120: 1 unresolved externals

基本上我正在尝试创建一个用于创建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++ 程序员,但我正在学习中。

批评我,我要求它!

提前感谢您提供的任何帮助,非常感谢:)

4

2 回答 2

3

你忘了告诉编译器里面的函数printText是. 因此,对于编译器,它仍然是未定义的。controls.cppcontrols::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不是intforR和。GB

于 2012-06-09T10:50:21.127 回答
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 作为控件的成员函数,但是您从代码中调用它的方式表明您希望它如何运行。

于 2012-06-09T10:46:47.727 回答