MFC中类之间的访问问题!!
我在MFC下先定义一个类A,再在另一个文件定义一个B类,其中B类的函数用到了A作为参数,然后我在B中包含了A的头文件,编译结果报错了。。。A.h中classA{}A.cp...
我在MFC下先定义一个类A,再在另一个文件定义一个B类,其中B类的函数用到了A作为参数,然后我在B中包含了A的头文件,编译结果报错了。。。
A.h中
class A{}
A.cpp中
(空的,做个样子)
B.h中
#include "A.h"
class B
{
public:
fun(A* a); //重点是这里访问了A类
}
B.cpp中
(随便定义了下函数)
差不多就这样,然后编译出错,说 语法错误:定义的标识符“A”
但是如果我在B.h中包含了A.h后再声明一下A,像这样class A;这样编译就通过了,这是怎么回事???包含了头文件还需要再声明这个类? 展开
A.h中
class A{}
A.cpp中
(空的,做个样子)
B.h中
#include "A.h"
class B
{
public:
fun(A* a); //重点是这里访问了A类
}
B.cpp中
(随便定义了下函数)
差不多就这样,然后编译出错,说 语法错误:定义的标识符“A”
但是如果我在B.h中包含了A.h后再声明一下A,像这样class A;这样编译就通过了,这是怎么回事???包含了头文件还需要再声明这个类? 展开
展开全部
B.h中
#include "A.h"
这样是没问题的,你检查一下其它错误吧,再定义class A;是不对的,这样实际使用中会屏蔽(也不识别)应该使用的A。
#include "A.h"
这样是没问题的,你检查一下其它错误吧,再定义class A;是不对的,这样实际使用中会屏蔽(也不识别)应该使用的A。
追问
我第二次就是声明了下,没加{ },不算是定义吧。。
追答
恩,我表达有误,同一个类,第二次声明会覆盖原来的(如果第一次声明有效,并且增加了作用域),因为你原来的声明必然有类的成员声明,这个再次声明会产生问题。
另外,如果你第二次声明成功,那么说明,在相同作用域下,原来的声明是无效的,检查别的问题吧,是不是a.h有别的问题,还是b.h的include存在宏定义的编译分支等。
展开全部
B.h中
#include "A.h"
B.cpp中
#include "B.h"
这样,在我电脑上测试没有问题
#include "A.h"
B.cpp中
#include "B.h"
这样,在我电脑上测试没有问题
追问
你建的是什么工程,MFC还是win32控制台。我在win32控制台下弄就好好的,就是不知道MFC怎么会这样。
追答
是MFC,正常,只是提示没有添加预编译头,在A.cpp和B.cpp中添加#include "stdafx.h"就没什么错了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
按道理说如果你真的是单向使用的class,确实不应该的;
你把A.h故意写错,保证编译会失败的那种,然后在没有"class A;"的语句下再次编译B.CPP看看是否有编译错误?
如果没有错,说明A.h没有被编译包含进来
你把A.h故意写错,保证编译会失败的那种,然后在没有"class A;"的语句下再次编译B.CPP看看是否有编译错误?
如果没有错,说明A.h没有被编译包含进来
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询