试图了解Win api编程,但是我遇到了一个问题。在vs 2017中,我无法摆脱错误名称空间,win没有成员'simpleControl'。我已经在网上搜索了一个答案,但找不到与我的特定问题有关的答案。我希望有人可以阐明我的问题。我是否有周期性依赖关系问题,如果可以的话,我该如何解决我的问题?如果有人愿意帮助我,我有一些代码
#pragma once
#ifndef WIN_SIMPLE_CONTROL_H
#define WIN_SIMPLE_CONTROL_H
#include "Controller.h"
namespace Win
{
class simpleControl: public Controller
{
public:
simpleControl();
~simpleControl() {};
int close();
int command(int id, int cmd, LPARAM msg);
int create();
private:
};
}
#endif
我的simpleControl继承自controller.h类,该类也是Win的命名空间,我如何在Win命名空间中也拥有simpleControl,我的主要功能如下
#include <windows.h>
#include "Window.h"
#include "controller.h"
int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR cmdArgs, int
cmdShow)
{
MSG Msg;
char name[] = "Simple Window";
Win::simpleControl mainCtrl; ->>>>///my problem is here
Win::Window mainWin(hInst, name, 0, &mainCtrl);
mainWin.create();
mainWin.show();
/// Process the main window's messages
while( GetMessage(&Msg, NULL, 0, 0) )
{
TranslateMessage(&Msg);
DispatchMessage(&Msg);
}
return 0;
}
我控制器的头文件如下
#pragma once
#ifndef WIN_CONTROLLER_H
#define WIN_CONTROLLER_H
#include <Windows.h>
namespace Win
{
class Controller
{
public:
Controller();
virtual ~Controller();
//window handle
void setHandle(HWND handle);
//WM_CLOSE
virtual int close();
virtual int command(int id, int cmd, LPARAM msg);
virtual int create();
virtual int destroy();
protected:
HWND handle;
};
inline void Controller::setHandle(HWND hwnd) { handle = hwnd; }
inline int Controller::close() { ::DestroyWindow(handle);
return 0;
}
inline int Controller::command(int id, int cmd, LPARAM msg) {
return 0;
}
inline int Controller::create() { return 0; }
inline int Controller::destroy() { return 0; }
}
#endif
答案 0 :(得分:-1)
您应该包括定义simpleControl的头文件和名称空间。 谢谢!另外,您应与我们共享Window.h。