两个类之间相互调用的问题

lizhenggang520 2008-10-25 10:06:53
各位好,这个问题已经快把我搞死了!正常情况下应该能用的,但就是怎么都不行,特发帖求助!一定帮帮俺啊!先行谢过!

下面的代码是根据我的情况缩写成的,意思很明白:一个类B为主窗体类MainFrame提供相应的函数,MainFrame.cpp包含B的头文件,声明个对象可以用了(B::FuncB())。现在反过来,要在B中要调用MainFrame的函数(FileUPload()),在类B的头文件b.h中声明class MainFrame,定义一个指针,并把MainFrame的指针传递给它,OK,编译通过!调用:MainFrame->FileUpload(),在这里不行了:

error C2027: use of undefined type 'MainFrame'

我看了同样问题的帖子,依然没办法解决,帮我看看,咱回事哩?


========CODE============

b.h:
class MainFrame;
class B{
B(Filesync* Frame):MainFrame( Frame ){}
void FuncB();
Filesync* MainFrame;
}

b.cpp
#include "b.h"
void FuncB(){
MainFrame->FileUpload();
}

MainFrame.h:
#include "b.h"
class MainFrame
{
MainFrame();
B b;
bool FileUPload();
FuncA();


}

MainFrame.cpp:
#include "MainFrame.h"

MainFrame::MainFrame:b(this)

bool FileUPload()
{
...
}

FuncA()
{
b.FuncB();
}


========CODE============
...全文
119 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
lizhenggang520 2008-10-26
  • 打赏
  • 举报
回复
谢谢各位!问题解决啦!
我发现无法定义的成员都是些控件,把相应的头文件都包含进去就好了
散分!
lizhenggang520 2008-10-26
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 lily604 的回复:]
class MainFrame;
.................
Filesync* MainFrame;

MainFrame 是类
怎么还像Filesync* MainFrame; 这样声明啊
[/Quote]

不好意思,我发帖的时候疏忽了,MainFrame* MainFrame


[Quote=引用 6 楼 goodluckhzm 的回复:]
首先:
b.cpp
将#include "b.h"
换为
#include "MainFrame.h" // 加入了这个文件等于包含了两个头文件,只包含b.h的话只是定义了class MainFrame;里面具体内容没有
//可以想象一下函数只有声明却没有实现的情况
[/Quote]

这样做引用的错误没有了,但是MAINFRAME里面的成员都无法定义了:
error C2501: '×××' : missing storage-class or type specifiers

怎么改呢?
幸运黑芝麻 2008-10-26
  • 打赏
  • 举报
回复
最后,虽然b.h中用到了MainFrame却不是MainFrame.h中(能不能重复包含就不知了,应该是不行的)
lily604 2008-10-26
  • 打赏
  • 举报
回复
class MainFrame;
.................
Filesync* MainFrame;

MainFrame 是类
怎么还像Filesync* MainFrame; 这样声明啊

幸运黑芝麻 2008-10-26
  • 打赏
  • 举报
回复
首先:
b.cpp
将#include "b.h"
换为
#include "MainFrame.h" // 加入了这个文件等于包含了两个头文件,只包含b.h的话只是定义了class MainFrame;里面具体内容没有
//可以想象一下函数只有声明却没有实现的情况
然后注意头文件的重复包含问题:
b.h:
#ifndef b_h
#define b_h

class MainFrame;
class B{
B(Filesync* Frame):MainFrame( Frame ){}
void FuncB();
Filesync* MainFrame;
}
#endif

MainFrame.h:
#include "b.h"
#ifndef MainFrame_h
#define MainFrame_h


class MainFrame
{
MainFrame();
B b;
bool FileUPload();
FuncA();


}
#endif

lizhenggang520 2008-10-26
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 daixuefeng203 的回复:]
调用一定要放在头文件里么?
[/Quote]

那样会存在相互包含的问题,铁定不行的
daixuefeng203 2008-10-26
  • 打赏
  • 举报
回复
调用一定要放在头文件里么?
lizhenggang520 2008-10-26
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 scklotz 的回复:]
b.cpp
#include "mainframe.h" // 加上这句
[/Quote]

试过了,没有作用

[Quote=引用 2 楼 wjb_yd 的回复:]
b.cpp
#include "b.h"
void FuncB(){
MainFrame->FileUpload(); //到这里还没看到MainFrame的定义,怎么调用它的方法???
}
[/Quote]

请问,应当怎么做呢?
wjb_yd 2008-10-25
  • 打赏
  • 举报
回复
b.h:
class MainFrame;
class B{
B(Filesync* Frame):MainFrame( Frame ){}
void FuncB();
Filesync* MainFrame;
}

b.cpp
#include "b.h"
void FuncB(){
MainFrame->FileUpload(); //到这里还没看到MainFrame的定义,怎么调用它的方法???
}
scklotz 2008-10-25
  • 打赏
  • 举报
回复
b.cpp
#include "mainframe.h" // 加上这句
#include "b.h"
void FuncB(){
MainFrame->FileUpload();
}

64,651

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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