什么是交叉引用?
简单来说就是 A类中包含B类的对象,B类中包含A类的对象。
class A{
B b;
};
class B{
A a;
};
这样写是会出问题的。
为什么产生交叉引用?
因为编译器如果先编译 A,那么 A 中引用了 B,B 还没有编译所以不能先编译 A,相反如果先编译 B ,B 中引用了 A,A 还没有编译,所以也不能先编译 B。于是编译器就迷茫了。
解决办法
// Test_Console.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <iostream>
#include <Windows.h>
#include<string>
using namespace std;
// 先声明再创建,解决交叉引用
class A;
class B;
class A{
public:
// 声明为指针类型,解决交叉引用
B* b;
int value;
};
class B{
public:
// 声明为指针类型,解决交叉引用
A* a;
int value;
};
int _tmain(int argc, _TCHAR* argv[])
{
// 初始化
A a;
B b;
a.value = 1;
b.value = 2;
a.b = &b;
b.a = &a;
// 输出
cout << "a.value = " << a.value << endl;
cout << "b.value = " << b.value << endl;
cout << "a.b->value = " << a.b->value << endl;
cout << "b.a->value = " << b.a->value << endl;
getchar();
return 0;
}
效果图: