是不是这个虚函数有问题?请帮忙看看

charkie charkie 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
#include <windows.h>
HINSTANCE hInst;
HINSTANCE hInstance;
MSG msg;
char lpszClassName[]="Window_class";
char* ShowText;
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);

class CFrameWnd
{
public:
HWND hWnd;
public:
int RegisterWindow();
void Create(LPCTSTR lpClassName,LPCTSTR lpWindowName);
void ShowWindow(int nCmdShow);
void UpdateWindow();
};

int CFrameWnd::RegisterWindow()
{
WNDCLASS wc;
wc.style=0;
wc.lpfnWndProc=::WndProc;
wc.cbClsExtra=0;
wc.cbWndExtra=0;
wc.hInstance=hInstance;
wc.hIcon=LoadIcon(NULL,IDI_APPLICATION);
wc.hCursor=LoadCursor(NULL,IDC_ARROW);
wc.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
wc.lpszMenuName=lpszClassName;
wc.lpszClassName=lpszClassName;
return RegisterClass(&wc);
}

void CFrameWnd::Create(LPCTSTR lpClassName,LPCTSTR lpWindowName)
{
RegisterWindow();
hInst=hInstance;
hWnd=CreateWindow(lpszClassName,lpWindowName,WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,0,CW_USEDEFAULT,0,NULL,NULL,hInstance,NULL);
}

void CFrameWnd::ShowWindow(int nCmdShow)
{
::ShowWindow(hWnd,nCmdShow);
}

void CFrameWnd::UpdateWindow()
{
::UpdateWindow(hWnd);
}

class CWinApp
{
public:
CFrameWnd* m_pMainWnd;
public:
virtual BOOL InitInstance(int nCmdShow);
int Run();
};

int CWinApp::Run()
{
while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}

class CMyApp:public CWinApp
{
public:
BOOL InitInstance(int nCmdShow);
};
//CMyApp::InitInstance(int nCmdShow)
CMyApp::InitInstance(int nCmdShow)
{
m_pMainWnd=new CFrameWnd;
m_pMainWnd->Create(NULL,"New Encapsulated Windows Program");
m_pMainWnd->ShowWindow(nCmdShow);
m_pMainWnd->UpdateWindow();
return true;
}

CMyApp theApp;

int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
{
int ResultCode=-1;
theApp.InitInstance(nCmdShow);
return ResultCode=theApp.Run();
}

LRESULT CALLBACK WndProc(HWND hWnd,UINT message,WPARAM wParam, LPARAM lParam)
{
PAINTSTRUCT ps;
HDC hdc;
switch(message)
{
case WM_LBUTTONDOWN:
ShowText="Hello!";
InvalidateRect(hWnd,NULL,1);
break;
case WM_PAINT:
hdc=BeginPaint(hWnd,&ps);
TextOut(hdc,50,50,ShowText,10);
EndPaint(hWnd,&ps);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd,message,wParam,lParam);
}
return 0;
}


link的时候出现错误:
--------------------Configuration: MFC_Eg0202 - Win32 Debug--------------------
Linking...
main.obj : error LNK2001: unresolved external symbol "public: virtual int __thiscall CWinApp::InitInstance(int)" (?InitInstance@CWinApp@@UAEHH@Z)
Debug/MFC_Eg0202.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.

MFC_Eg0202.exe - 2 error(s), 0 warning(s)

请帮忙分析分析,谢谢
...全文

相关推荐

基类子类虚函数的调用顺序问题

在虚函数的基类与子类构造函数中调用虚函数。当生成子类对象时,函数的调用顺序是怎样的

西二旗小码农

c++中虚函数和纯虚函数的作用与区别

虚函数为了重载和多态的需要,在基类中是有定义的,即便定义是空,所以子类中可以重写也可以不写基类中的此函数! 纯虚函数在基类中是没有定义的,必须在子类中加以实现,很像java中的接口函数! 虚函数 引入原因:为了方便使用多态特性,我们常常需要在基类中定义虚函数。 class Cman { public: virtual void Eat(){……}; void Move(); private: }; class CChild : public CMan { public: virtual void Eat(){……}; private: }; CMan m_man; CChild m_chil

weixin_38673798

c++ 虚函数与纯虚函数的区别(深入分析)

本篇文章是对c++中虚函数与纯虚函数的区别进行了详细的分析介绍,需要的朋友参考下

weixin_38610277

C++中虚函数和纯虚函数定义

只有用virtual声明类的成员函数,使之成为虚函数,不能将类外的普通函数声明为虚函数。因为虚函数的作用是允许在派生类中对基类的虚函数重新定义。所以虚函数只能用于类的继承层次结构中。   一个成员函数被声明为虚函数后,在同一类族中的类不能再定义一个非virtual的但与该虚函数具有相同的参数(包括个数和类型)和函数返回值类型的同名函数。   根据什么考虑是否把一个成员函数声明为虚函数?   ①  看成员函数所在的类是否会作为基类   ② 看成员函数在类的继承后有无可能被更改功能,如果希望更改其功能的,一般应该将它声明为虚函数。   如果成员函数在类被继承后功能不需修改,或派生类用不到

weixin_38749305

C++学习篇?纯虚函数和抽象类

纯虚函数是一种特殊的虚函数,它的一般格式如下:   class &lt;类名>   {   virtual &lt;类型>&lt;函数名>(&lt;参数表>)=0;   …   };   在许多情况下,在基类中不能对虚函数给出有意义有实现,而把它说明为纯虚函数,它的实现留给该基类的派生类去做。这是纯虚函数的作用。下面给出一个纯虚函数的例子。    #include class point//抽象类 { public: point(int i=0, int j=0) { x0=i; y0=j; } virtual void set() = 0;//纯虚函数 virtual void draw(

weixin_38747978
评论 5
收藏 已收藏
分享
返回顶部
charkie
VC/MFC 16,550 成员 421,606 内容