h里写的函数cpp里报错,有人能来看看吗

时间:2022-04-20 02:26:39

/*
 * GameEngine.h
 *
 *  Created on: 2015年1月21日
 *   
 */



#ifndef GAMEENGINE_H_
#define GAMEENGINE_H_
#pragma once
#include <windows.h>

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine,
int iCmdShow);
LRESULT CALLBACK WndProc(HWND hWindow, UINT msg, WPARAM wParame,
LPARAM lParam);
BOOL GameInitialize(HINSTANCE hInstance);
void GameStart(HWND hWindow);
void GameEnd();
void GameActivate(HWND hWindow);
void GameDeactivate(HWND hWindow);
void GamePaint(HDC hDC);
void GameCycle();



class GameEngine {

protected:
static GameEngine* m_pGameEngine;
HINSTANCE m_hInstance;
HWND m_hWindow;
TCHAR m_szWindowClass[32];
TCHAR m_szTitle[32];
WORD m_wIcon, m_wSmallIcon;
int m_iWidth, m_iHeight;
int m_iFrameDelay;
BOOL m_bSleep;

public:
GameEngine(HINSTANCE hInstance, LPTSTR szWindowClass, LPTSTR szTitle,
WORD wIcon, WORD wSmallIcon, int iWidth = 640, int iHeight = 480);
virtual ~GameEngine();
static GameEngine* GetEngine() {return m_pGameEngine; };
BOOL Initialize(int iCmdShow);
LRESULT HandleEvent(HWND hWindow, UINT msg, WPARAM wParam, LPARAM lParam);

BOOL getBSleep() const {
return m_bSleep;
}

void setBSleep(BOOL bSleep) {
m_bSleep = bSleep;
}

HINSTANCE getHInstance() const {
return m_hInstance;
}

HWND getHWindow() const {
return m_hWindow;
}

void setHWindow(HWND hWindow) {
m_hWindow = hWindow;
}

int getIFrameDelay() const {
return m_iFrameDelay;
}

void setFrameRate(int frameRate) {
m_iFrameDelay = 1000 / frameRate;
}

int getIHeight() const {
return m_iHeight;
}

int getIWidth() const {
return m_iWidth;
}

const TCHAR* getSzTitle() const {
return m_szTitle;
}

WORD getWIcon() const {
return m_wIcon;
}

WORD getWSmallIcon() const {
return m_wSmallIcon;
}

};



#endif /* GAMEENGINE_H_ */

11 个解决方案

#1


/*
 * GameEngine.cpp
 *
 *  Created on: 2015年1月21日
 *   
 */

#include "GameEngine.h"

GameEngine *GameEngine::m_pGameEngine = NULL;

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine,
int iCmdShow) {
MSG msg;
static int iTickTrigger = 0;
int iTickCount;
if (GameInitialize(hInstance)) {
if (!GameEngine::GetEngine()->Initialize(iCmdShow)) {
return FALSE;
}

while (true) {
if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) {
if (msg.message == WM_QUIT) {
break;
TranslateMessage(&msg);
DispatchMessage(&msg);
}
} else {
if (!GameEngine::GetEngine()->getBSleep()) {
iTickCount = GetTickCount();
if (iTickCount > iTickTrigger) {
iTickTrigger = iTickCount;
GameEngine::GetEngine()->getIFrameDelay();
GameCycle();
}
}
}
}
return (int) msg.wParam;
}
GameEnd();
return TRUE;
}

LRESULT CALLBACK WndProc(HWND hWindow, UINT msg, WPARAM wParame,
LPARAM lParam) {
return GameEngine::GetEngine()->HandleEvent(hWindow, msg, wParame, lParam);
}

GameEngine::GameEngine(HINSTANCE hInstance, LPTSTR szWindowClass,
LPTSTR szTitle, WORD wIcon, WORD wSmallIcon, int iWidth, int iHeight) {
m_pGameEngine = this;
m_hInstance = hInstance;
m_hWindow = NULL;
if (lstrlen(szWindowClass) > 0) {
lstrcpy(m_szWindowClass, szWindowClass);
}
if (lstrlen(szTitle) > 0) {
lstrcpy(m_szTitle, szTitle);
}
m_wIcon = wIcon;
m_wSmallIcon = wSmallIcon;
m_iHeight = iHeight;
m_iWidth = iWidth;
m_iFrameDelay = 17;
m_bSleep = TRUE;
}

GameEngine::~GameEngine() {
// TODO Auto-generated destructor stub
}

BOOL GameEngine::Initialize(int iCmdShow) {
WNDCLASSEX wndclass;
wndclass.cbSize = sizeof(wndclass);
wndclass.style = CS_HREDRAW | CS_VREDRAW;
wndclass.lpfnWndProc = WndProc;
wndclass.cbClsExtra = 0;
wndclass.cbWndExtra = 0;
wndclass.hInstance = m_hInstance;
wndclass.hIcon = LoadIcon(m_hInstance, MAKEINTRESOURCE(getWIcon()));
wndclass.hIconSm = LoadIcon(m_hInstance, MAKEINTRESOURCE(getWSmallIcon()));
wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);
wndclass.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
wndclass.lpszMenuName = NULL;
wndclass.lpszClassName = m_szWindowClass;

if (!RegisterClassEx(&wndclass)) {
return FALSE;
}
int iWindowWidth = m_iWidth + GetSystemMetrics(SM_CXFIXEDFRAME) * 2,
iWindowHeight = m_iHeight + GetSystemMetrics(SM_CYFIXEDFRAME) * 2
+ GetSystemMetrics(SM_CYCAPTION);
if(wndclass.lpszMenuName !=NULL){
iWindowHeight +=GetSystemMetrics(SM_CYMENU);
}
int iXWindowPos = (GetSystemMetrics(SM_CXSCREEN)-iWindowWidth)/2;
int iYWindowPos = (GetSystemMetrics(SM_CYSCREEN) - iWindowHeight)/2;
m_hWindow = CreateWindow(m_szWindowClass,m_szTitle,WS_POPUPWINDOW | WS_CAPTION | WS_MINIMIZEBOX,iXWindowPos,iYWindowPos,iWindowWidth,iWindowHeight,NULL,NULL,m_hInstance,NULL);
if(!m_hWindow){
return FALSE;
}
ShowWindow(m_hWindow,iCmdShow);
UpdateWindow(m_hWindow);

return TRUE;
}

LRESULT GameEngine::HandleEvent(HWND hWindow,UINT msg,WPARAM wParam, LPARAM lParam){
switch(msg){
case WM_CREATE:
setHWindow(hWindow);
GameStart(hWindow);
return 0;
case WM_SETFOCUS:
GameActivate(hWindow);
setBSleep(FALSE);
return 0;
case WM_KILLFOCUS:
GameDeactivate(hWindow);
setBSleep(TRUE);
return 0;
case WM_PAINT:
HDC hDC;
PAINTSTRUCT ps;
hDC = BeginPaint(hWindow,&ps);
GamePaint(hDC);
EndPaint(hWindow,&ps);
return 0;
case WM_DESTROY:
GameEnd();
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hWindow,msg,wParam,lParam);
}





#2


15:27:07 **** Incremental Build of configuration Debug for project game ****
Info: Internal Builder is used for build
g++ -O0 -g3 -Wall -c -fmessage-length=0 -o GameEngine.o "..\\GameEngine.cpp" 
g++ -o game.exe GameEngine.o 
GameEngine.o: In function `ZN10GameEngine10setHWindowEP6HWND__':
H:/workspace/game/Debug/../GameEngine.h:(.text+0xd): undefined reference to `GameInitialize(HINSTANCE__*)'
H:/workspace/game/Debug/../GameEngine.h:(.text+0xb1): undefined reference to `GameCycle()'
H:/workspace/game/Debug/../GameEngine.h:(.text+0xc0): undefined reference to `GameEnd()'
GameEngine.o: In function `ZN10GameEngine11HandleEventEP6HWND__jjl':
H:/workspace/game/Debug/../GameEngine.cpp:114: undefined reference to `GameStart(HWND__*)'
H:/workspace/game/Debug/../GameEngine.cpp:117: undefined reference to `GameActivate(HWND__*)'
H:/workspace/game/Debug/../GameEngine.cpp:121: undefined reference to `GameDeactivate(HWND__*)'
H:/workspace/game/Debug/../GameEngine.cpp:128: undefined reference to `GamePaint(HDC__*)'
H:/workspace/game/Debug/../GameEngine.cpp:132: undefined reference to `GameEnd()'
collect2: ld returned 1 exit status

15:27:07 Build Finished (took 617ms)
这是编译信息,IDE是 eclipse  编译器是 MINGW

#3


报什么错?winmain已经有声明了吧

#4


很明显的出错提示:

BOOL GameInitialize(HINSTANCE hInstance);
void GameStart(HWND hWindow);
void GameEnd();
void GameActivate(HWND hWindow);
void GameDeactivate(HWND hWindow);
void GamePaint(HDC hDC);
void GameCycle();
 
这一排函数都没有定义!!!!!!!!!!

#5


h里写的函数cpp里报错,有人能来看看吗
这是编译后报错的地方,编译之前没报错。  

#6


引用 4 楼 lovesmiles 的回复:
很明显的出错提示:

BOOL GameInitialize(HINSTANCE hInstance);
void GameStart(HWND hWindow);
void GameEnd();
void GameActivate(HWND hWindow);
void GameDeactivate(HWND hWindow);
void GamePaint(HDC hDC);
void GameCycle();
 
这一排函数都没有定义!!!!!!!!!!



我是照着书上打的,书上也是这样 h里写的函数cpp里报错,有人能来看看吗

#7


不要迷信书、考题、老师、回帖;
要迷信CPU、编译器、调试器、运行结果。
并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。
任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实!

有人说一套做一套,你相信他说的还是相信他做的?
其实严格来说这个世界上古往今来所有人都是说一套做一套,不是吗?

#8


引用 7 楼 zhao4zhong1 的回复:
不要迷信书、考题、老师、回帖;
要迷信CPU、编译器、调试器、运行结果。
并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。
任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实!

有人说一套做一套,你相信他说的还是相信他做的?
其实严格来说这个世界上古往今来所有人都是说一套做一套,不是吗?


CPU都不信了,那还搞毛编程啊。

#9


引用 7 楼 zhao4zhong1 的回复:
不要迷信书、考题、老师、回帖;
要迷信CPU、编译器、调试器、运行结果。
并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。
任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实!

有人说一套做一套,你相信他说的还是相信他做的?
其实严格来说这个世界上古往今来所有人都是说一套做一套,不是吗?

大师,你还在坚守

#10


引用 6 楼 u010116320 的回复:
Quote: 引用 4 楼 lovesmiles 的回复:

很明显的出错提示:

BOOL GameInitialize(HINSTANCE hInstance);
void GameStart(HWND hWindow);
void GameEnd();
void GameActivate(HWND hWindow);
void GameDeactivate(HWND hWindow);
void GamePaint(HDC hDC);
void GameCycle();
 
这一排函数都没有定义!!!!!!!!!!



我是照着书上打的,书上也是这样 h里写的函数cpp里报错,有人能来看看吗

仔细把书看完,你肯定还有一个cpp文件没有打。

#11


引用 10 楼 lovesmiles 的回复:
Quote: 引用 6 楼 u010116320 的回复:

Quote: 引用 4 楼 lovesmiles 的回复:

很明显的出错提示:

BOOL GameInitialize(HINSTANCE hInstance);
void GameStart(HWND hWindow);
void GameEnd();
void GameActivate(HWND hWindow);
void GameDeactivate(HWND hWindow);
void GamePaint(HDC hDC);
void GameCycle();
 
这一排函数都没有定义!!!!!!!!!!



我是照着书上打的,书上也是这样 h里写的函数cpp里报错,有人能来看看吗

仔细把书看完,你肯定还有一个cpp文件没有打。


确实啊,后面还有。 h里写的函数cpp里报错,有人能来看看吗

#1


/*
 * GameEngine.cpp
 *
 *  Created on: 2015年1月21日
 *   
 */

#include "GameEngine.h"

GameEngine *GameEngine::m_pGameEngine = NULL;

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine,
int iCmdShow) {
MSG msg;
static int iTickTrigger = 0;
int iTickCount;
if (GameInitialize(hInstance)) {
if (!GameEngine::GetEngine()->Initialize(iCmdShow)) {
return FALSE;
}

while (true) {
if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) {
if (msg.message == WM_QUIT) {
break;
TranslateMessage(&msg);
DispatchMessage(&msg);
}
} else {
if (!GameEngine::GetEngine()->getBSleep()) {
iTickCount = GetTickCount();
if (iTickCount > iTickTrigger) {
iTickTrigger = iTickCount;
GameEngine::GetEngine()->getIFrameDelay();
GameCycle();
}
}
}
}
return (int) msg.wParam;
}
GameEnd();
return TRUE;
}

LRESULT CALLBACK WndProc(HWND hWindow, UINT msg, WPARAM wParame,
LPARAM lParam) {
return GameEngine::GetEngine()->HandleEvent(hWindow, msg, wParame, lParam);
}

GameEngine::GameEngine(HINSTANCE hInstance, LPTSTR szWindowClass,
LPTSTR szTitle, WORD wIcon, WORD wSmallIcon, int iWidth, int iHeight) {
m_pGameEngine = this;
m_hInstance = hInstance;
m_hWindow = NULL;
if (lstrlen(szWindowClass) > 0) {
lstrcpy(m_szWindowClass, szWindowClass);
}
if (lstrlen(szTitle) > 0) {
lstrcpy(m_szTitle, szTitle);
}
m_wIcon = wIcon;
m_wSmallIcon = wSmallIcon;
m_iHeight = iHeight;
m_iWidth = iWidth;
m_iFrameDelay = 17;
m_bSleep = TRUE;
}

GameEngine::~GameEngine() {
// TODO Auto-generated destructor stub
}

BOOL GameEngine::Initialize(int iCmdShow) {
WNDCLASSEX wndclass;
wndclass.cbSize = sizeof(wndclass);
wndclass.style = CS_HREDRAW | CS_VREDRAW;
wndclass.lpfnWndProc = WndProc;
wndclass.cbClsExtra = 0;
wndclass.cbWndExtra = 0;
wndclass.hInstance = m_hInstance;
wndclass.hIcon = LoadIcon(m_hInstance, MAKEINTRESOURCE(getWIcon()));
wndclass.hIconSm = LoadIcon(m_hInstance, MAKEINTRESOURCE(getWSmallIcon()));
wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);
wndclass.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
wndclass.lpszMenuName = NULL;
wndclass.lpszClassName = m_szWindowClass;

if (!RegisterClassEx(&wndclass)) {
return FALSE;
}
int iWindowWidth = m_iWidth + GetSystemMetrics(SM_CXFIXEDFRAME) * 2,
iWindowHeight = m_iHeight + GetSystemMetrics(SM_CYFIXEDFRAME) * 2
+ GetSystemMetrics(SM_CYCAPTION);
if(wndclass.lpszMenuName !=NULL){
iWindowHeight +=GetSystemMetrics(SM_CYMENU);
}
int iXWindowPos = (GetSystemMetrics(SM_CXSCREEN)-iWindowWidth)/2;
int iYWindowPos = (GetSystemMetrics(SM_CYSCREEN) - iWindowHeight)/2;
m_hWindow = CreateWindow(m_szWindowClass,m_szTitle,WS_POPUPWINDOW | WS_CAPTION | WS_MINIMIZEBOX,iXWindowPos,iYWindowPos,iWindowWidth,iWindowHeight,NULL,NULL,m_hInstance,NULL);
if(!m_hWindow){
return FALSE;
}
ShowWindow(m_hWindow,iCmdShow);
UpdateWindow(m_hWindow);

return TRUE;
}

LRESULT GameEngine::HandleEvent(HWND hWindow,UINT msg,WPARAM wParam, LPARAM lParam){
switch(msg){
case WM_CREATE:
setHWindow(hWindow);
GameStart(hWindow);
return 0;
case WM_SETFOCUS:
GameActivate(hWindow);
setBSleep(FALSE);
return 0;
case WM_KILLFOCUS:
GameDeactivate(hWindow);
setBSleep(TRUE);
return 0;
case WM_PAINT:
HDC hDC;
PAINTSTRUCT ps;
hDC = BeginPaint(hWindow,&ps);
GamePaint(hDC);
EndPaint(hWindow,&ps);
return 0;
case WM_DESTROY:
GameEnd();
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hWindow,msg,wParam,lParam);
}





#2


15:27:07 **** Incremental Build of configuration Debug for project game ****
Info: Internal Builder is used for build
g++ -O0 -g3 -Wall -c -fmessage-length=0 -o GameEngine.o "..\\GameEngine.cpp" 
g++ -o game.exe GameEngine.o 
GameEngine.o: In function `ZN10GameEngine10setHWindowEP6HWND__':
H:/workspace/game/Debug/../GameEngine.h:(.text+0xd): undefined reference to `GameInitialize(HINSTANCE__*)'
H:/workspace/game/Debug/../GameEngine.h:(.text+0xb1): undefined reference to `GameCycle()'
H:/workspace/game/Debug/../GameEngine.h:(.text+0xc0): undefined reference to `GameEnd()'
GameEngine.o: In function `ZN10GameEngine11HandleEventEP6HWND__jjl':
H:/workspace/game/Debug/../GameEngine.cpp:114: undefined reference to `GameStart(HWND__*)'
H:/workspace/game/Debug/../GameEngine.cpp:117: undefined reference to `GameActivate(HWND__*)'
H:/workspace/game/Debug/../GameEngine.cpp:121: undefined reference to `GameDeactivate(HWND__*)'
H:/workspace/game/Debug/../GameEngine.cpp:128: undefined reference to `GamePaint(HDC__*)'
H:/workspace/game/Debug/../GameEngine.cpp:132: undefined reference to `GameEnd()'
collect2: ld returned 1 exit status

15:27:07 Build Finished (took 617ms)
这是编译信息,IDE是 eclipse  编译器是 MINGW

#3


报什么错?winmain已经有声明了吧

#4


很明显的出错提示:

BOOL GameInitialize(HINSTANCE hInstance);
void GameStart(HWND hWindow);
void GameEnd();
void GameActivate(HWND hWindow);
void GameDeactivate(HWND hWindow);
void GamePaint(HDC hDC);
void GameCycle();
 
这一排函数都没有定义!!!!!!!!!!

#5


h里写的函数cpp里报错,有人能来看看吗
这是编译后报错的地方,编译之前没报错。  

#6


引用 4 楼 lovesmiles 的回复:
很明显的出错提示:

BOOL GameInitialize(HINSTANCE hInstance);
void GameStart(HWND hWindow);
void GameEnd();
void GameActivate(HWND hWindow);
void GameDeactivate(HWND hWindow);
void GamePaint(HDC hDC);
void GameCycle();
 
这一排函数都没有定义!!!!!!!!!!



我是照着书上打的,书上也是这样 h里写的函数cpp里报错,有人能来看看吗

#7


不要迷信书、考题、老师、回帖;
要迷信CPU、编译器、调试器、运行结果。
并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。
任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实!

有人说一套做一套,你相信他说的还是相信他做的?
其实严格来说这个世界上古往今来所有人都是说一套做一套,不是吗?

#8


引用 7 楼 zhao4zhong1 的回复:
不要迷信书、考题、老师、回帖;
要迷信CPU、编译器、调试器、运行结果。
并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。
任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实!

有人说一套做一套,你相信他说的还是相信他做的?
其实严格来说这个世界上古往今来所有人都是说一套做一套,不是吗?


CPU都不信了,那还搞毛编程啊。

#9


引用 7 楼 zhao4zhong1 的回复:
不要迷信书、考题、老师、回帖;
要迷信CPU、编译器、调试器、运行结果。
并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。
任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实!

有人说一套做一套,你相信他说的还是相信他做的?
其实严格来说这个世界上古往今来所有人都是说一套做一套,不是吗?

大师,你还在坚守

#10


引用 6 楼 u010116320 的回复:
Quote: 引用 4 楼 lovesmiles 的回复:

很明显的出错提示:

BOOL GameInitialize(HINSTANCE hInstance);
void GameStart(HWND hWindow);
void GameEnd();
void GameActivate(HWND hWindow);
void GameDeactivate(HWND hWindow);
void GamePaint(HDC hDC);
void GameCycle();
 
这一排函数都没有定义!!!!!!!!!!



我是照着书上打的,书上也是这样 h里写的函数cpp里报错,有人能来看看吗

仔细把书看完,你肯定还有一个cpp文件没有打。

#11


引用 10 楼 lovesmiles 的回复:
Quote: 引用 6 楼 u010116320 的回复:

Quote: 引用 4 楼 lovesmiles 的回复:

很明显的出错提示:

BOOL GameInitialize(HINSTANCE hInstance);
void GameStart(HWND hWindow);
void GameEnd();
void GameActivate(HWND hWindow);
void GameDeactivate(HWND hWindow);
void GamePaint(HDC hDC);
void GameCycle();
 
这一排函数都没有定义!!!!!!!!!!



我是照着书上打的,书上也是这样 h里写的函数cpp里报错,有人能来看看吗

仔细把书看完,你肯定还有一个cpp文件没有打。


确实啊,后面还有。 h里写的函数cpp里报错,有人能来看看吗