VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 749|回复: 4

求未定义类型错误解决方案

[复制链接]

2

主题

3

帖子

4.00

积分

新手上路

Rank: 1

积分
4.00
发表于 2020-3-17 14:30:01 | 显示全部楼层 |阅读模式
已经提问过一回,上次没有说明白,这次再具体说一下。各位高手帮忙看一下如何解决。
testA.h:

#if !defined(_a_)
#define _a_
#include "testB.h"
class A{
public:
        B b;
public:
        aMethod();
};
#endif

testA.cpp:

#include "testA.h"
A::aMethod(){

}

testB.h
#if !defined(_b_)
#define _b_
//# include "testA.h"<--这个Include了也不好使
class A;
class B{
public:
        A * a;
public:
        setA(A*a);
        bMethod();
};
#endif

testB.cpp
#include "testB.h"
B::setA(A*a){
        this->a=a;
}
B::bMethod(){
        a->aMethod();
}

编译类A没问题,编译类B有错误:
testB.cpp
testB.cpp(6) : error C2027: 使用了未定义类型“A”
        d:\dxsdk\Extras\DirectShow\Samples\C++\DirectShow\course_client2\destop capture filter\testB.h(4) : 参见“A”的声明
testB.cpp(6) : error C2227: “->aMethod”的左侧必须指向类/结构/联合


这种相互之间存在依赖关系应当如何来解决。
回复

使用道具 举报

0

主题

55

帖子

44.00

积分

新手上路

Rank: 1

积分
44.00
发表于 2020-6-19 08:00:01 | 显示全部楼层
testB.cpp
#include "testB.h"
#include "testA.h"
回复

使用道具 举报

2

主题

3

帖子

4.00

积分

新手上路

Rank: 1

积分
4.00
 楼主| 发表于 2020-6-19 18:15:01 | 显示全部楼层
竟然如此简单,我晕,能说明一下吗,为什么我在testB.h里面加入#include "testA.h"不好使
回复

使用道具 举报

0

主题

55

帖子

44.00

积分

新手上路

Rank: 1

积分
44.00
发表于 2020-6-19 20:15:01 | 显示全部楼层
因为循环包含。
回复

使用道具 举报

0

主题

5

帖子

6.00

积分

新手上路

Rank: 1

积分
6.00
发表于 2020-6-20 19:15:01 | 显示全部楼层
类B中只有类A的指针,那么定义类B时有个类A的前向声明也就可以了,
但类A中使用类B做为成员,所以定义类A时要看到类B的完整定义.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表