栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++: C2027使用了未定义类型

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++: C2027使用了未定义类型

C++: C2027使用了未定义类型

出现场景:类内套娃,类A中定义另一个类B,并访问其属性
出错原因:类A的定义在类B之前,
出错代码:

class B;
class A
{
public:
	B* b;
	A()  // 默认构造函数
	{
		b = new B;  //为类b创建堆区内存
	}
	void visit()
	{
		cout << "A类正在访问B类中属性" << b->b_a;   //类B此时还尚未定义,只给了声明
	}
};
class B
{
public:
	int b_a = 10;
	int b_b = 20;
};

void test()
{
	A a;
	a.visit();
}
//主函数
 int main()
{
	 test();
	system("pause");
	return 0;
}

解决办法:

1、改换AB类定义的位置

class B
{
public:
	int b_a = 10;
	int b_b = 20;
};
class A
{
public:
	B* b;
	A()  // 默认构造函数
	{
		b = new B;  //为类b创建堆区内存
	}
	void visit()
	{
		cout << "A类正在访问B类中属性" << b->b_a;   //类B此时还尚未定义,只给了声明
	}
};

2、类外定义函数(调用类B中属性的函数要写在类B定义的后面)

class B;
class A
{
public:
	B* b;
	A(); //类内声明
	void visit();  //声明
};
class B
{
public:
	int b_a = 10;
	int b_b = 20;
};
A::A() //类外定义
{
	b = new B;
}
void A::visit()  // 类外写函数
{
	cout << "A类正在访问B类中属性" << b->b_a;
}

void test()
{
	A a;
	a.visit();
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/879309.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号