使用未定义的class错误【不完整类型的使用】

在h4头文件里我声明了类c

在y4源文件里我定义了类C

 

现在我在A类的头文件里声明C类型的成员变量。

 

在源文件中的构造函数中去初始化对象成员变量c

 

报错

 

我总结一下错误:

这是因为我们使用了不完整类型的原因。它缺乏足够的信息例如长度去描述一个完整的对象。

 不完整类型举例

1.class base

2.struct test

3.未知长度的数组extern int a[];

base和test只给出了声明,没有给出定义。

1.不完整类型必须通过某种方式补充完整,才能使用它们进行实例化

2.否则只能用于定义指针或引用,因为此时实例化的是指针或引用本身,不是base或test对象

综上所述:

当一个类A中需要使用另外一个类C作成员变量的时候,被用作成员变量的类C必须是已经定义的,否则A在构造时无法确定所需的内存空间。 

如果类C是在另外一个头文件C.h中声明的,如果在A的定义前加上"class C;",也只是对C进行了声明而非定义,A依然不知道以C为数据类型的成员变量需要多少内存空间。

解决方法:

1.在A.h中#include"C.h"

2.在A的定义中把C改成C*,把A中的相应成员变量的数据类型设置为B*,因为指针的大小是恒定的,在64位系统中为4字节,所以这时A的空间大小是已知的,就不会引起错误。

修改之后的代码:

头文件:

class C;
class A {

public:
	A();
	A(int , int);
	void print();
	int f4();
private:
	int a;
	int b;
	 C * c ;

};

 源文件:

#include"h2.h"
#include"h4.h"
#include <iostream>
using namespace std;
A::A() {
	a = 8;
	b = 9;
    c = & C();
	
	
}
A::A(int n1 , int n2) {
	a = n1;
	b = n2;
	c = & C();
}
void A::print() {
	cout << "我是老A\n";
}
int A::f4() {
	return a + b;
}

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

无情的阅读机器

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值