MFC 头文件相互包含问题

时间:2021-12-02 16:49:14
我的程序是一个单文档程序,基类是CFormView
然后,我自己动态创建了一个CTabCtrl 类,放在了CmyFormView上
以下代码从略

         //FixTabCtrl.h 中
       class CFixTabCtrl: public CTabCtrl{
       void Func1();
         ... 
      }
   // CFixTabCtrl.cpp 中
   void   CFixTabCtrl::Func1()
    {  ((CmyFormView*)GetParent())->GetTree();  }


  //在CmyFomView 中
# include "FixTabCtrl"//头文件中加入这一句
 class CmyFormView: public CFormView
{
      CFixTabCtrl m_Tab;
     CTreeCtrl  m_wnd1;
    CTreeCtrl * GetTree(){ return &m_wnd1 }



编译就说不认识CmyFormView;   所以我又给 在CFixTabCtrl.h 中加入
 #include“myFormView.h”和Class CmyFormView;的声明结果错得更多,
全是说系统生成的代码有错。 
然后我又尝试 将CFixTabCtrl m_Tab; 改为CFixTabCtrl* m_Tab;
仍然不行,请问下大侠们, 我这种情况怎么解决? 
我只是想在子控件的得到CmyFormView()的指针,并且对他进行操作。

18 个解决方案

#1


在CFixTabCtrl.h 中加入
 #include“myFormView.h”就可以啦

#2


引用 1 楼 king_hhuang 的回复:
在CFixTabCtrl.h 中加入
 #include“myFormView.h”就可以啦

大哥,你看清楚啊,我都试过了的根本不行啊。我的问题是简单,但是我不可能犯这么白痴的错误吧。

#3


你在CFixTabCtrl.CPP 中加入 #include“myFormView.h”;
然后要用到myFormView再定义它的指针

#4


引用 3 楼 king_hhuang 的回复:
你在CFixTabCtrl.CPP 中加入 #include“myFormView.h”;
然后要用到myFormView再定义它的指针


我这些都是尝试过了的,还是不行啊,崩溃中。那你看有其他方法达到我的目的么?

#5


把#include "FixTabCtrl"加到myFormView.h中;
再把#include“myFormView.h”加到FixTabCtrl.CPP
应该不会有问题的啊,是不是你在FixTabCtrl.h中定义了myFormView类的变量或指针

另外你的程序编译报的什么错误

#6


#include“myFormView.h”加到FixTabCtrl.CPP
FixTabCtrl.h中定义一个CView指针,把myFormView的指针赋给它
在FixTabCtrl.CPP中强制转换为myFormView*类型在使用

#7


没有, 我没有在FixTabCtrl 中定义myFormView的变量和指针,只是在函数中用了下。
程序的错误很奇怪

1>c:\users\haoer\documents\visual studio 2008\projects\mfc\myform\myform\myformview.h(19) : error C2143: syntax error : missing ';' before '*'
1>c:\users\haoer\documents\visual studio 2008\projects\mfc\myform\myform\myformview.h(19) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\users\haoer\documents\visual studio 2008\projects\mfc\myform\myform\myformview.h(19) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\users\haoer\documents\visual studio 2008\projects\mfc\myform\myform\myformview.h(19) : warning C4183: 'GetDocument': missing return type; assumed to be a member function returning 'int'
1>c:\users\haoer\documents\visual studio 2008\projects\mfc\myform\myform\fixtabctrl.cpp(35) : error C2440: 'initializing' : cannot convert from 'CWnd *' to 'CmyFormView *'
1>        Cast from base to derived requires dynamic_cast or static_cast
1>myFormView.cpp
1>c:\users\haoer\documents\visual studio 2008\projects\mfc\myform\myform\myformview.h(19) : error C2143: syntax error : missing ';' before '*'
1>c:\users\haoer\documents\visual studio 2008\projects\mfc\myform\myform\myformview.h(19) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\users\haoer\documents\visual studio 2008\projects\mfc\myform\myform\myformview.h(19) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\users\haoer\documents\visual studio 2008\projects\mfc\myform\myform\myformview.h(19) : warning C4183: 'GetDocument': missing return type; assumed to be a member function returning 'int'
1>c:\users\haoer\documents\visual studio 2008\projects\mfc\myform\myform\myformview.cpp(125) : error C2556: 'CmyFormDoc *CmyFormView::GetDocument(void) const' : overloaded function differs only by return type from 'int *CmyFormView::GetDocument(void) const'
1>        c:\users\haoer\documents\visual studio 2008\projects\mfc\myform\myform\myformview.h(19) : see declaration of 'CmyFormView::GetDocument'
1>c:\users\haoer\documents\visual studio 2008\projects\mfc\myform\myform\myformview.cpp(125) : error C2371: 'CmyFormView::GetDocument' : redefinition; different basic types
1>        c:\users\haoer\documents\visual studio 2008\projects\mfc\myform\myform\myformview.h(19) : see declaration of 'CmyFormView::GetDocument'

除了一大堆识别不了的错误,还有说CmyFormView::GetDocument的错误,但是我要是吧相应的代码注释掉,又完全正确。真的郁闷的很

#8


尝试这样的做法:
1.在CFixTabCtrl.capp 中加入 #include“myFormView.h”;不行的话,看下面一种方法。

2.将对象的定义全放入头文件中,再在头文件中加#include“myFormView.h”;
 
你的问题 我以前也遇到过,多试试可能的错误,就可以了

#9


可能是你使用CmyFormView的GetDocument有问题吧,你那段代码呢?

#10


我根本没有动GetDocument,我没有用到文档,所以就没有改系统的代码,然后我要是不在我的
FixTabCtrl.cpp 中加入 myFormView.h 的话,并且不使用CmyForm 类的话,程序就完全正确。

另外6楼的方法也不正确。

#11


实在没招就用排除法试试
在最小环境中一个一个增加代码,直到错误出现
在最大环境中一个一个减少代码,直到错误出现

#12


不行啊,跪求高手恩泽!!!!!

#13


不知道这样行不行啊???
CFixTabCtrl.h 中加入 Class CmyFormView
CFixTabCtrl.cpp 中加入 #include“myFormView.h”

#14


CFixTabCtrl.h 中加入 Class CmyFormView 是加不了,编译报错!

#15


引用 14 楼 fullinhouse818 的回复:
CFixTabCtrl.h 中加入 Class CmyFormView 是加不了,编译报错!

马甲啊???
什么错啊???

#16


我找到方法了! 终于编译不报错了!先说说方法。一会验证运行有没有问题;

CFixTabCtrl.h 中加入 Class CmyFormView
CFixTabCtrl.cpp 中加入 #include“myFormView.h”

正如13楼说所的方法一样 ,但是还是要修改一个地方,就是将MFC自动生成的代码里面的
myFormView.cpp里面的头文件包含 #include "myFormDoc.h"删除,并将这一句添加到myFormView.h
里面! 现在就没有报错了

#17


虽然结贴,还是希望有知道原因的高手,讲一下原因。谢

#18


这明显是头文件互相包含的问题....

#1


在CFixTabCtrl.h 中加入
 #include“myFormView.h”就可以啦

#2


引用 1 楼 king_hhuang 的回复:
在CFixTabCtrl.h 中加入
 #include“myFormView.h”就可以啦

大哥,你看清楚啊,我都试过了的根本不行啊。我的问题是简单,但是我不可能犯这么白痴的错误吧。

#3


你在CFixTabCtrl.CPP 中加入 #include“myFormView.h”;
然后要用到myFormView再定义它的指针

#4


引用 3 楼 king_hhuang 的回复:
你在CFixTabCtrl.CPP 中加入 #include“myFormView.h”;
然后要用到myFormView再定义它的指针


我这些都是尝试过了的,还是不行啊,崩溃中。那你看有其他方法达到我的目的么?

#5


把#include "FixTabCtrl"加到myFormView.h中;
再把#include“myFormView.h”加到FixTabCtrl.CPP
应该不会有问题的啊,是不是你在FixTabCtrl.h中定义了myFormView类的变量或指针

另外你的程序编译报的什么错误

#6


#include“myFormView.h”加到FixTabCtrl.CPP
FixTabCtrl.h中定义一个CView指针,把myFormView的指针赋给它
在FixTabCtrl.CPP中强制转换为myFormView*类型在使用

#7


没有, 我没有在FixTabCtrl 中定义myFormView的变量和指针,只是在函数中用了下。
程序的错误很奇怪

1>c:\users\haoer\documents\visual studio 2008\projects\mfc\myform\myform\myformview.h(19) : error C2143: syntax error : missing ';' before '*'
1>c:\users\haoer\documents\visual studio 2008\projects\mfc\myform\myform\myformview.h(19) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\users\haoer\documents\visual studio 2008\projects\mfc\myform\myform\myformview.h(19) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\users\haoer\documents\visual studio 2008\projects\mfc\myform\myform\myformview.h(19) : warning C4183: 'GetDocument': missing return type; assumed to be a member function returning 'int'
1>c:\users\haoer\documents\visual studio 2008\projects\mfc\myform\myform\fixtabctrl.cpp(35) : error C2440: 'initializing' : cannot convert from 'CWnd *' to 'CmyFormView *'
1>        Cast from base to derived requires dynamic_cast or static_cast
1>myFormView.cpp
1>c:\users\haoer\documents\visual studio 2008\projects\mfc\myform\myform\myformview.h(19) : error C2143: syntax error : missing ';' before '*'
1>c:\users\haoer\documents\visual studio 2008\projects\mfc\myform\myform\myformview.h(19) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\users\haoer\documents\visual studio 2008\projects\mfc\myform\myform\myformview.h(19) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\users\haoer\documents\visual studio 2008\projects\mfc\myform\myform\myformview.h(19) : warning C4183: 'GetDocument': missing return type; assumed to be a member function returning 'int'
1>c:\users\haoer\documents\visual studio 2008\projects\mfc\myform\myform\myformview.cpp(125) : error C2556: 'CmyFormDoc *CmyFormView::GetDocument(void) const' : overloaded function differs only by return type from 'int *CmyFormView::GetDocument(void) const'
1>        c:\users\haoer\documents\visual studio 2008\projects\mfc\myform\myform\myformview.h(19) : see declaration of 'CmyFormView::GetDocument'
1>c:\users\haoer\documents\visual studio 2008\projects\mfc\myform\myform\myformview.cpp(125) : error C2371: 'CmyFormView::GetDocument' : redefinition; different basic types
1>        c:\users\haoer\documents\visual studio 2008\projects\mfc\myform\myform\myformview.h(19) : see declaration of 'CmyFormView::GetDocument'

除了一大堆识别不了的错误,还有说CmyFormView::GetDocument的错误,但是我要是吧相应的代码注释掉,又完全正确。真的郁闷的很

#8


尝试这样的做法:
1.在CFixTabCtrl.capp 中加入 #include“myFormView.h”;不行的话,看下面一种方法。

2.将对象的定义全放入头文件中,再在头文件中加#include“myFormView.h”;
 
你的问题 我以前也遇到过,多试试可能的错误,就可以了

#9


可能是你使用CmyFormView的GetDocument有问题吧,你那段代码呢?

#10


我根本没有动GetDocument,我没有用到文档,所以就没有改系统的代码,然后我要是不在我的
FixTabCtrl.cpp 中加入 myFormView.h 的话,并且不使用CmyForm 类的话,程序就完全正确。

另外6楼的方法也不正确。

#11


实在没招就用排除法试试
在最小环境中一个一个增加代码,直到错误出现
在最大环境中一个一个减少代码,直到错误出现

#12


不行啊,跪求高手恩泽!!!!!

#13


不知道这样行不行啊???
CFixTabCtrl.h 中加入 Class CmyFormView
CFixTabCtrl.cpp 中加入 #include“myFormView.h”

#14


CFixTabCtrl.h 中加入 Class CmyFormView 是加不了,编译报错!

#15


引用 14 楼 fullinhouse818 的回复:
CFixTabCtrl.h 中加入 Class CmyFormView 是加不了,编译报错!

马甲啊???
什么错啊???

#16


我找到方法了! 终于编译不报错了!先说说方法。一会验证运行有没有问题;

CFixTabCtrl.h 中加入 Class CmyFormView
CFixTabCtrl.cpp 中加入 #include“myFormView.h”

正如13楼说所的方法一样 ,但是还是要修改一个地方,就是将MFC自动生成的代码里面的
myFormView.cpp里面的头文件包含 #include "myFormDoc.h"删除,并将这一句添加到myFormView.h
里面! 现在就没有报错了

#17


虽然结贴,还是希望有知道原因的高手,讲一下原因。谢

#18


这明显是头文件互相包含的问题....