2012-06-09 2 views
1

первое сообщение здесь, поскольку я застрял с моей замечательной функцией C++.Ошибка компоновщика в функции

Ошибки я получаю ошибку линкера и следующим образом:

main.obj: ошибка LNK2019: неразрешенный внешний символ «общественность: недействительный thiscall управляет :: 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 \ TimedShut down.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 функции, но я удалил это, пытаясь определить источник ошибок.

Im полностью потерянные ребята, я не удивительный программист на С ++, но я в процессе обучения.

критиковать меня, я требую его!

Заранее спасибо за любую помощь данной, высоко ценится :)

ответ

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.

+0

Такая простая ошибка, которую я пропустил = \ Большое вам спасибо: D – Timmy

+0

Добро пожаловать;) Пожалуйста, не забудьте принять андерсера, нажав на зеленый галочку в нижней части счетчика голосов. – Synxis

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); 
} 

Edit: Это не видно из кода, который вы указали в вопросе, что вы на самом деле получили printText как функции члена управления, но способ, в котором вы назовите его из вашего кода, и это означает, что вы намерены его функционировать.

Смежные вопросы