C++中两个类如何相互引用?

来源:百度知道 编辑:UC知道 时间:2024/06/14 08:50:24
class B
{
public:
typedef void* void_pointer;
A::int_pointer p;//用到A中的定义
int j;
};

class A
{
public:
typedef int* int_pointer;
B::void_pointer p;//用到B中的定义
int i;
};

int main()
{
return 0;
}

//上述程序在vc6.0中报 'A' : is not a class or namespace name 的错误
//想问下高手如何解决这种相互引用的问题
//多谢啦

#include <iostream>

using namespace std;

template < class A >
class B
{
public:
typedef void* void_pointer;
typename A::int_pointer p;//用到A中的定义
int j;
};

class A
{
public:
typedef int* int_pointer;
B<A>::void_pointer p;//用到B中的定义
int i;
};

int main()
{

return 0;
}

模板!

似乎是不可以的

如果是函数的话, 一个函数A想要调用另一个函数B, 只需要保证A的实现代码前面有B的声明就可以了; 因为常用函数的声明是只含参数代码的(除非A的参数有B的函数指针, B也同样, 这样肯定不能互相调用, 他们之中肯定有一个不知道那个函数指针的类型 ), 互相包含的代码一般在定义(实现)中, 故保证所有声明在定义之前就可以互相包含了

但类有点不同, 类的声明中如果包含了另一个类; 而且双方都这样的话, 肯定会有一方找不到类型, 这跟上面说的函数参数包括另一个函数的指针是同样的情况.
class New{...};本来就是声明的代码了, 定义是通过New::...来实现的; 要想让另一个类知道New的存在, 必须把class New{...}整个放在那个类前面, 所以没理由能互相声明为成员的.

一般的说类的声明放在New.h头文件中, 实现放在New.cpp中
你怎么可能在为了让Old类有New中的成员, 而在Old.h中加上一句#include "New.h", 而又在New.h中加上一句#include "Old.h"呢?<