一个添加data member的问题

rainerhyj 2003-05-04 10:42:22
有两个类CTextureDlg 和 CGrayShow, 我想在CTextureDlg 中添加一个为
CGrayShow类的对象的data member m_showGray,

我在CTextureDlg.h 中加入了 #include "GrayShow.h" 和
Class CGrayShow;
然后
public:
CGrayShow m_showGray;
Compile 后得到这样的问题:
e:\rs\图像处理\test\myproject\texturedlg.h(20) : error C2079: 'm_grayShow' uses undefined class 'CGrayShow'
请问如何解决
...全文
106 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
superS 2003-05-12
  • 打赏
  • 举报
回复
多谢各位相助。原来头文件里的宏,一来是避免重复编译,二来定义版本增强兼容性,这些都和我的问题关系不大。

关系就在这里啊!!!你怎么不明白呢。。。
rainerhyj 2003-05-11
  • 打赏
  • 举报
回复
本问题,还是有待思考,相信会得到解决的办法,谢谢各位的帮忙。
rainerhyj 2003-05-07
  • 打赏
  • 举报
回复
多谢各位相助。原来头文件里的宏,一来是避免重复编译,二来定义版本增强兼容性,这些都和我的问题关系不大。

我是直接拷贝了那个头文件,然后修改里面的函数及其参数:
原来为
void CGrayShow::LoadImage(CString &FilePathName)
改为
void CGrayShow::LoadImage(CMyProjectDoc* pDoc)
CMyProjectDoc是我的Doc类
不知道问题是不是出在这里?
rainerhyj 2003-05-06
  • 打赏
  • 举报
回复
谢谢楼上。
问;在GrayShow。h中有这样一段:
#if !defined(AFX_GRAYSHOW_H_INCLUDED_)
#define AFX_GRAYSHOW_H_INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif

#include ""
..........
#include ""

class CGrayShow
{
....
}

#endif

当我把最后的那个#endif移到#define AFX_GRAYSHOW_H_INCLUDED_后面时,
问题也解决了,请问为什么会这样
superS 2003-05-06
  • 打赏
  • 举报
回复
那是避免重复包含用的。(一个类对应一个头文件,一个头文件对应一个标示)

看来是他认为已定义过了AFX_GRAYSHOW_H_INCLUDED_(也就是说已经包含过这个头文件),所以
#define AFX_GRAYSHOW_H_INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif

#include ""
..........
#include ""

class CGrayShow
{
....
}
这些都没执行,就产生了你以前说的错误。
但不应该啊。奇怪。你是不是拷贝了别的头文件, 然后修改的类定义内容吧?如果是就不要这样,使用类向导!
superS 2003-05-05
  • 打赏
  • 举报
回复
你头文件肯定有问题。

但是如果保留Class CGrayShow;
并且把data member改成
CGrayShow* m_grayShow;
问题就解决了,
请问各位为什么这样??

这是合法的,即使不include头文件这样声明也是合法的。意思是m_grayShow是CGrayShow的指针,而CGrayShow是个类,但目前还不定义他。这是允许的。
superS 2003-05-05
  • 打赏
  • 举报
回复
不应该啊,你确定那个头文件叫"GrayShow.h" ?
rainerhyj 2003-05-05
  • 打赏
  • 举报
回复
我检查过了头文件没有错,如果去掉Class CGrayShow;
就会出现这样的情况:
e:\rs\图像处理\test\myproject\texturedlg.h(20) : error C2146: syntax error : missing ';' before identifier 'm_grayShow'
e:\rs\图像处理\test\myproject\texturedlg.h(20) : error C2501: 'CGrayShow' : missing storage-class or type specifiers
e:\rs\图像处理\test\myproject\texturedlg.h(20) : error C2501: 'm_grayShow' : missing storage-class or type specifiers

但是如果保留Class CGrayShow;
并且把data member改成
CGrayShow* m_grayShow;
问题就解决了,
请问各位为什么这样??
fly_bird 2003-05-05
  • 打赏
  • 举报
回复
去掉Class CGrayShow;这句,
看看你包含的头文件名对吗?
edrftgyh 2003-05-05
  • 打赏
  • 举报
回复
看看你的头文件是不是GrayShow.h,再试试去掉Class CGrayShow;这一句!
herrycsdn 2003-05-05
  • 打赏
  • 举报
回复
好象没问题,看看你CGrayShow大小写有没有问题?
还有你的CGrayShow 类放在工程里吗?

16,473

社区成员

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

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

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