常见类似错误:
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() { ... }
...
|