hur.cn - 华软网

 热门搜索

我想从VC wizard生成框架中的VIEW类再派生 为何编译报错呢?

  作者:未知    来源:网络    更新时间:2010/11/24
如题,Wizard自动为我生成了CScribbleView类,相关的.H和.CPP文件都齐全运行没问题,但是我想从CScribbleView再派生一个Class_view类。为什么我什么也没做,编译就报错了呢?
f:\c++book\scribble\step1\scribvw.h(22) : error C2143: syntax error : missing ';' before '*'
f:\c++book\scribble\step1\scribvw.h(22) : error C2501: 'CScribbleDoc' : missing storage-class or type specifiers
f:\c++book\scribble\step1\scribvw.h(22) : error C2501: 'GetDocument' : missing storage-class or type specifiers
f:\c++book\scribble\step1\scribvw.h(25) : error C2143: syntax error : missing ';' before '*'
f:\c++book\scribble\step1\scribvw.h(25) : error C2501: 'CStroke' : missing storage-class or type specifiers
f:\c++book\scribble\step1\scribvw.h(25) : error C2501: 'm_pStrokeCur' : missing storage-class or type specifiers
那位大侠帮帮忙吧,小弟不胜感激!!!
---华软 网友回答---
为啥没人?问题太白痴?白痴也说一声吧,不怕打击
---华软网友回复---
在头文件中包含了CScribbleView的头文件没有。拼写有误不。CScribbleView的类声明大括号后面有没有加';'
---华软网友回复---
楼上老大,派生的类我也是用WIZARD实现的,语法错误应该不会有
---华软网友回复---
派生类,我啥也没做,就是个空壳,但是现在报错的第一条指向的是CScribbleView 对应的.CPP文件
---华软网友回复---
错了,是.H文件

---华软网友回复---
从编译错误来看应该是漏写了一些符号,把你的代码一个符号都不漏地贴出来看看
---华软网友回复---
// ScribVw.h : interface of the CScribbleView class
//
// This is a part of the Microsoft Foundation Classes C++ library.
// Copyright (C) 1992-1995 Microsoft Corporation
// All rights reserved.
//
// This source code is only intended as a supplement to the
// Microsoft Foundation Classes Reference and related
// electronic documentation provided with the library.
// See these sources for detailed information regarding the
// Microsoft Foundation Classes product.
/////////////////////////////////////////////////////////////////////////////
class CScribbleView : public CView
{
protected: // create from serialization only
CScribbleView();
DECLARE_DYNCREATE(CScribbleView)

// Attributes
public:
CScribbleDoc* GetDocument();

protected:
CStroke*    m_pStrokeCur;   // the stroke in progress
CPoint      m_ptPrev;       // the last mouse pt in the stroke in progress

// Operations
public:

// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CScribbleView)
public:
virtual void OnDraw(CDC* pDC);  // overridden to draw this view
virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
protected:
virtual BOOL OnPreparePrinting(CPrintInfo* pInfo);
virtual void OnBeginPrinting(CDC* pDC, CPrintInfo* pInfo);
virtual void OnEndPrinting(CDC* pDC, CPrintInfo* pInfo);
//}}AFX_VIRTUAL

// Implementation
public:
virtual ~CScribbleView();
#ifdef _DEBUG
virtual void AssertValid() const;
virtual void Dump(CDumpContext& dc) const;
#endif

protected:

// Generated message map functions
protected:
//{{AFX_MSG(CScribbleView)
afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
afx_msg void OnMouseMove(UINT nFlags, CPoint point);
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};

#ifndef _DEBUG  // debug version in ScribVw.cpp
inline CScribbleDoc* CScribbleView::GetDocument()
   { return (CScribbleDoc*)m_pDocument; }
#endif

/////////////////////////////////////////////////////////////////////////////
// ScribVw.cpp : implementation of the CScribbleView class
//
// This is a part of the Microsoft Foundation Classes C++ library.
// Copyright (C) 1992-1995 Microsoft Corporation
// All rights reserved.
//
// This source code is only intended as a supplement to the
// Microsoft Foundation Classes Reference and related
// electronic documentation provided with the library.
// See these sources for detailed information regarding the
// Microsoft Foundation Classes product.

#include "stdafx.h"
#include "Scribble.h"

#include "ScribDoc.h"
#include "ScribVw.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CScribbleView

IMPLEMENT_DYNCREATE(CScribbleView, CView)
BEGIN_MESSAGE_MAP(CScribbleView, CView)
//{{AFX_MSG_MAP(CScribbleView)
ON_WM_LBUTTONDOWN()
ON_WM_LBUTTONUP()
ON_WM_MOUSEMOVE()
//}}AFX_MSG_MAP
// Standard printing commands
ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CScribbleView construction/destruction

CScribbleView::CScribbleView()
{
// TODO: add construction code here

}

CScribbleView::~CScribbleView()
{
}

BOOL CScribbleView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
//  the CREATESTRUCT cs

return CView::PreCreateWindow(cs);
}

/////////////////////////////////////////////////////////////////////////////
// CScribbleView drawing

void CScribbleView::OnDraw(CDC* pDC)
{
CScribbleDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);

// The view delegates the drawing of individual strokes to
// CStroke::DrawStroke().
CTypedPtrList<CObList,CObject*>& strokeList = pDoc->m_strokeList;
POSITION pos = strokeList.GetHeadPosition();
while (pos != NULL)
{
CStroke* pStroke =(CStroke*)strokeList.GetNext(pos);
pStroke->DrawStroke(pDC);
}
}

/////////////////////////////////////////////////////////////////////////////
// CScribbleView printing

BOOL CScribbleView::OnPreparePrinting(CPrintInfo* pInfo)
{
// default preparation
return DoPreparePrinting(pInfo);
}

void CScribbleView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add extra initialization before printing
}

void CScribbleView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add cleanup after printing
}

/////////////////////////////////////////////////////////////////////////////
// CScribbleView diagnostics

#ifdef _DEBUG
void CScribbleView::AssertValid() const
{
CView::AssertValid();
}

void CScribbleView::Dump(CDumpContext& dc) const
{
CView::Dump(dc);
}

CScribbleDoc* CScribbleView::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CScribbleDoc)));
return (CScribbleDoc*)m_pDocument;
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CScribbleView message handlers

void CScribbleView::OnLButtonDown(UINT, CPoint point) 
{
    // Pressing the mouse button in the view window starts a new stroke

m_pStrokeCur = GetDocument()->NewStroke();
// Add first point to the new stroke
m_pStrokeCur->m_pointArray.Add(point);

SetCapture();       // Capture the mouse until button up.
m_ptPrev = point;   // Serves as the MoveTo() anchor point for the
// LineTo() the next point, as the user drags the
// mouse.

return;
}

void CScribbleView::OnLButtonUp(UINT, CPoint point) 
{
// Mouse button up is interesting in the Scribble application
// only if the user is currently drawing a new stroke by dragging
// the captured mouse.

if (GetCapture() != this)
return; // If this window (view) didn't capture the mouse,
// then the user isn't drawing in this window.

CScribbleDoc* pDoc = GetDocument();

CClientDC dc(this);

CPen* pOldPen = dc.SelectObject(pDoc->GetCurrentPen());
dc.MoveTo(m_ptPrev);
dc.LineTo(point);
dc.SelectObject(pOldPen);
m_pStrokeCur->m_pointArray.Add(point);

ReleaseCapture();   // Release the mouse capture established at
// the beginning of the mouse drag.
return;
}

void CScribbleView::OnMouseMove(UINT, CPoint point) 
{
// Mouse movement is interesting in the Scribble application
// only if the user is currently drawing a new stroke by dragging
// the captured mouse.

if (GetCapture() != this)
return; // If this window (view) didn't capture the mouse,
// then the user isn't drawing in this window.

CClientDC dc(this);
m_pStrokeCur->m_pointArray.Add(point);

// Draw a line from the previous detected point in the mouse
// drag to the current point.
CPen* pOldPen = dc.SelectObject(GetDocument()->GetCurrentPen());
dc.MoveTo(m_ptPrev);
dc.LineTo(point);
dc.SelectObject(pOldPen);
m_ptPrev = point;
return;
}
// class_view.h: interface for the class_view class.
//
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_CLASS_VIEW_H__FB902422_80EF_4CF8_B8C8_FE3B5714DF43__INCLUDED_)
#define AFX_CLASS_VIEW_H__FB902422_80EF_4CF8_B8C8_FE3B5714DF43__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#include "ScribVw.h"

class class_view : public CScribbleView  
{
public:
class_view();
virtual ~class_view();

};

#endif // !defined(AFX_CLASS_VIEW_H__FB902422_80EF_4CF8_B8C8_FE3B5714DF43__INCLUDED_)


// class_view.cpp: implementation of the class_view class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "Scribble.h"
#include "class_view.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

class_view::class_view()
{

}

class_view::~class_view()
{

}

---华软网友回复---
sorry没怎么整理有点乱

---华软网友回复---
帮你顶下。
---华软网友回复---
是这句:
CScribbleDoc* GetDocument();
缺:
#include "ScribDoc.h"


---华软网友回复---
schlafenhamster
谢谢你,你是牛人,对了,还能问问你为啥,没被派生之前不包含这个头文件就没问题,被派生之后就要加头文件了呢,这期间到底发生了什么呢?
---华软网友回复---
schlafenhamster
还在不?

---华软网友回复---
本来:
"ScribVw.h" // 头文件不能单独编译!
是与“ScribVw.cpp”一起编译的,在这个ScribVw.cpp中已包含#include "ScribDoc.h",所以没问题
//
你加了一个类后 "ScribVw.h" 现在又需要与class_view.cpp一起编译,所以他们之一必须包含
include "ScribVw.h"
class class_view : public CScribbleView   
---华软网友回复---
13楼解决了困扰我一天的问题      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。