定义一对类X和Y,X包含一个指向Y的指针,Y包含一个类型为X的对象

菜鸡的逆袭之路 2017-01-03 02:24:37
X.h:

#pragma once
#ifndef X_H
#define X_H
#include"Y.h"
struct X
{

Y y;
Y* py = &y;
};

#endif // !X_H


Y.h:

#pragma once
#ifndef Y_H
#define Y_H
#include"X.h"
struct Y
{

X x;
};
#endif // !Y_H


main.cpp:

#include"X.h"
#include"Y.h"
int main()
{
X xx;
Y yy;
}

错误代码:
1>d:\visual studio 2015_projects\test\test\y.h(8): error C3646: “x”: 未知重写说明符
1>d:\visual studio 2015_projects\test\test\y.h(8): error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int

利用分离式编译已经在main函数创建x,y对象之前定义了X类和Y类,并且写了包含了X.h和Y.h,请问为什么错了,如何修改?
...全文
355 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2017-01-03
  • 打赏
  • 举报
回复
解耦
幻夢之葉 2017-01-03
  • 打赏
  • 举报
回复
引用 4 楼 qq_26761205 的回复:
[quote=引用 3 楼 jianwen0529 的回复:] [quote=引用 2 楼 qq_26761205 的回复:] [quote=引用 1 楼 adlay 的回复:] 循环依赖了, 得从设计上改

#ifndef CP5_ex7_31_h
#define CP5_ex7_31_h

class Y;

class X {
    Y* y = nullptr;
};

class Y {
    X x;
};

#endif
为什么这个答案是正确的?[/quote] 不能计算大小的问题 X Y之中相互定义其对象,两边都依赖彼此的大小,导致根本计算不了 但是你第二个例子就不一样了 指针和引用所需要的存储大小是可计算的 一方使用 引用或者指针,就没有循环计算彼此大小的困扰[/quote] X.h:

#pragma once
#ifndef X_H
#define X_H
#include"Y.h"
struct X
{	
	Y* py = nullptr;
};

#endif // !X_H
我把X类中的Y对象去掉了,用nullptr初始化指向Y的指针,还是不行,和刚才的报错一样... ...[/quote] 1L不是说了么,相互包含头文件,用前置声明替代
  • 打赏
  • 举报
回复
引用 3 楼 jianwen0529 的回复:
[quote=引用 2 楼 qq_26761205 的回复:] [quote=引用 1 楼 adlay 的回复:] 循环依赖了, 得从设计上改

#ifndef CP5_ex7_31_h
#define CP5_ex7_31_h

class Y;

class X {
    Y* y = nullptr;
};

class Y {
    X x;
};

#endif
为什么这个答案是正确的?[/quote] 不能计算大小的问题 X Y之中相互定义其对象,两边都依赖彼此的大小,导致根本计算不了 但是你第二个例子就不一样了 指针和引用所需要的存储大小是可计算的 一方使用 引用或者指针,就没有循环计算彼此大小的困扰[/quote] X.h:

#pragma once
#ifndef X_H
#define X_H
#include"Y.h"
struct X
{	
	Y* py = nullptr;
};

#endif // !X_H
我把X类中的Y对象去掉了,用nullptr初始化指向Y的指针,还是不行,和刚才的报错一样... ...
幻夢之葉 2017-01-03
  • 打赏
  • 举报
回复
引用 2 楼 qq_26761205 的回复:
[quote=引用 1 楼 adlay 的回复:] 循环依赖了, 得从设计上改

#ifndef CP5_ex7_31_h
#define CP5_ex7_31_h

class Y;

class X {
    Y* y = nullptr;
};

class Y {
    X x;
};

#endif
为什么这个答案是正确的?[/quote] 不能计算大小的问题 X Y之中相互定义其对象,两边都依赖彼此的大小,导致根本计算不了 但是你第二个例子就不一样了 指针和引用所需要的存储大小是可计算的 一方使用 引用或者指针,就没有循环计算彼此大小的困扰
  • 打赏
  • 举报
回复
引用 1 楼 adlay 的回复:
循环依赖了, 得从设计上改

#ifndef CP5_ex7_31_h
#define CP5_ex7_31_h

class Y;

class X {
    Y* y = nullptr;
};

class Y {
    X x;
};

#endif
为什么这个答案是正确的?
www_adintr_com 2017-01-03
  • 打赏
  • 举报
回复
循环依赖了, 得从设计上改

64,648

社区成员

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

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