究竟错在哪???为什么??大家拉拉小弟一把!

musicdancer 2001-01-31 08:53:00
DrawTool.h文件为:

#if !defined(AFX_DRAWTOOL_H__59B6E7BD_1F35_40B7_B186_C922203680B9__INCLUDED_)
#define AFX_DRAWTOOL_H__59B6E7BD_1F35_40B7_B186_C922203680B9__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

class CWorkAideView;

class CDrawTool
{
public:
CDrawTool(enum DrawTool tool);
virtual ~CDrawTool();
virtual void OnLButtonDown(CWorkAideView* pView, UINT nFlags, const CPoint& point);
...
};
#endif // !defined(AFX_DRAWTOOL_H__59B6E7BD_1F35_40B7_B186_C922203680B9__INCLUDED_)


DrawTool.cpp文件为:

#include "stdafx.h"
#include "WorkAide.h"
#include "DrawTool.h"
#include "WorkAideView.h"

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


我在实现中使用了CWorkAideView

编译出错,莫名...
..\workaideview.h(21) : error C2143: syntax error : missing ';' before '*'
..\workaideview.h(21) : error C2501: 'CWorkAideDoc' : missing storage-class or type specifiers
..\workaideview.h(21) : error C2501: 'GetDocument' : missing storage-class or type specifiers

因为还没有在CWorkAideView写关于CDrawtool的代码,所以没有在CWorkAideView的cpp中include “DrawTool.h”。
不知问题何在,有人在这里问过类似问题,我也看了,但解答不周全。
我想知道这里出了什么错?
究竟vc中#include 的用法要注意些什么?像我这样的初学者常碰到这个问题,很是迷惑,请大家指点!谢谢
...全文
208 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
musicdancer 2001-02-02
  • 打赏
  • 举报
回复
我观察发现:

在HPP中使用什么类(比如CSomeClass),就加上CSomeClass someclass;
在CPP中则要把CSomeClass 的cpp文件中的所有#include ×××都要包含,而且有包含关系的,顺序不能颠倒,比如#include "WorkAideDoc.h"就要在#include "WorkAideView.h"上面,也就是View中使用了Doc,正如#include "stdafx.h"在最上面,因为所有类都使用了它。
不知这样理解有否错误,也算有点逻辑了,这样include,经多种试验,编译没有再次出错。

YuHao 2001-02-02
  • 打赏
  • 举报
回复
你理解的没错。
其实复杂的工程里面很难避免交叉引用类的问题,如果真的出了问题,就需要一点经验了。所以一般的头文件都要保证是这样的结构:
#ifndef ...
#define ...
...
#endif
这样不管交叉引用多少次都没有问题。
musicdancer 2001-02-02
  • 打赏
  • 举报
回复
谢谢YuHao指点
zhq2000 2001-02-01
  • 打赏
  • 举报
回复
在DrawTool.h中必须包含 WorkAideView.h 。
musicdancer 2001-02-01
  • 打赏
  • 举报
回复
谢谢YuHao,按你的方法,编译通过了

那么#include 时应遵循什么逻辑?
musicdancer 2001-02-01
  • 打赏
  • 举报
回复
谢谢YuHao,按你的方法,编译通过了

那么#include 时应遵循什么逻辑?
musicdancer 2001-02-01
  • 打赏
  • 举报
回复
不行,这样也不行的。
我只是加了CDrawTool这个类,其他都是Wizard写的,我没改。
YuHao 2001-02-01
  • 打赏
  • 举报
回复
表面看起来是没有改过的文件出了问题,但是考虑到这么多文件的复杂包含关系,也就不奇怪了.特别是VIEW的成员函数GetDocument用到了DOC类,但是并VIEW.H并没有包含DOC.H文件,所以交叉应用的时候容易出问题.我建议最好在VIEW.H文件头部包含DOC.H,这样或许可以解决问题.
musicdancer 2001-02-01
  • 打赏
  • 举报
回复
这是一个正确引用文件的问题。我不知引用错在那里。
错误竟然是在没动过的文件里!
musicdancer 2001-02-01
  • 打赏
  • 举报
回复
没人知道吗?不可能呀?
就告诉我include的用法也可以呀
musicdancer 2001-01-31
  • 打赏
  • 举报
回复
这样的出错碰到好多次,都不知道所以然,大家有什么经验不妨说说

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧