常见类似错误:
1<i:\try\ctry\ctry\ctryview.h(18) : error C2143: 语法错误 : 缺少“;”(在“*”的前面)
1<i:\try\ctry\ctry\ctryview.h(18) : error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
1<i:\try\ctry\ctry\ctryview.h(18) : error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
1<i:\try\ctry\ctry\ctryview.h(18) : warning C4183: “GetDocument”: 缺少返回类型;假定为返回“int”的成员函
任务:新建SDI工程,添加Snake类。添加菜单,该菜单调用Snake类的中一个函数,该函数不断改变Snake中成员变量值,并调用View中OnDraw函数进行绘制结果。
#pragma once
class CSnake
{
public:
int
total
;
void
set
(int
a
);
void
startshow
();
public:
CSnake(void);
~CSnake(void);
};
----------------------------------Snake.cpp----------------------------
#include
"StdAfx.h"
#include
"Snake.h"
#include
"MainFrm.h"
#include "SDIDoc.h"
//方法1:加上这句可以解决那个错误问题
#include
"SDI01View.h"
void CSnake::
set
(int
times
)
{
total
=
times
;
}
void CSnake::
startshow
()
{
CMainFrame *pFrame=(CMainFrame*)(
AfxGetApp
()->
GetMainWnd
());
CSDI01View *pView =(CSDI01View*)(pFrame->
GetActiveView
());
for (int
i
=
total
;
i
>0;
i
--)
{
pView->
setmember
(i);
Sleep
(500);
}
}
----------------------------------SDI01View.h----------------------------
#pragma once //#include "Snake.h" 不要随便在h文件里include,如果只是定义指针,可以用class CSnake申明为不完全类型,然
class CSnake; 后再cpp文件里include“Snake.h",对snake指针进行操作
class
CSDI01Doc
;
//方法2:也可以解决那个错误问题,原理一样
class CSDI01View : public CView
{
public:
void setmember(int k);
int num;
CSnake *snake;
public:
CSDI01Doc* GetDocument() const;
}
----------------------------------SDI01View.cpp----------------------------
#include "stdafx.h"
#include "SDI01.h"
#include "SDI01Doc.h"
#include "SDI01View.h"
#include "Snake.h"
CSDI01View::CSDI01View():num(0)
{
snake=new CSnake;
}
void CSDI01View::OnDraw(CDC* pDC)
{
CString str;
str.Format("%d",num);
pDC->TextOut(200,100,str);
}
void CSDI01View::setmember(int k)
{
num=k;
CDC*pDC1=GetDC();
OnDraw(pDC1);
}
void CSDI01View::OnMenuStart() // 入口:CSDI01View 菜单消息处理程序
{
snake->set(20);
snake->startshow();
}
|
也可以将外部类定义为一个全部变量,这样更方便一些。
//
注意到View.cpp,Doc.cpp中都包含了SDI01.h
----------------------------------SDI01.h----------------------------
class
CSDI01App
: public CWinApp
{
};
extern CSDI01App
theApp;
class
CSnake
;
//为了不要随便在h文件里include别的文件,可以声明。因为,下面也只是声明外部变量。
extern CSnake
theSnake;
----------------------------------SDI01.cpp----------------------------
#include "Snake.h"
CSDI01App theApp;
CSnake theSnake; //像theApp一样,可供外部任意有包含SDI01.h文件的文件使用
CSDI01App::CSDI01App() { ... }
...
|