c++结构内部的类指针

Class pointer inside struct C++

本文关键字:指针 内部 结构 c++      更新时间:2023-10-16

问题很简单,我想我不能这样做:(我在头文件)

typedef struct {
     myclass *p;
     ...
 } mystruct;
class myclass {
     private:
          mystruct *s;
          ...
}

因为当编译器到达结构体时,它不知道myclass是什么,但出于同样的原因,我也不能反向操作:

class myclass {
     private:
          mystruct *s;
          ...
}
typedef struct {
     myclass *p;
     ...
 } mystruct;

我怎样才能做到呢?我猜有某种方式说编译器"有一个结构称为mystruct"类(2个例子)之前,所以它知道mystruct *s这是可能的,但我不能设法做到这一点。由于

您需要使用前向声明:

class myclass;
typedef struct {
     myclass *p;
     ...
 } mystruct;
class myclass {
     private:
          mystruct *s;
          ...
}

现在编译器知道myclass是一个类,当它第一次看到它。


同样,在c++中不需要定义类型。你可以简单地写:

struct mystruct {
     myclass *p;
     ...
};

一般来说,可以声明一个指向尚未定义的类的指针。你只需要"声明"这个类(类myclass)。

这是定义具有交叉引用的类的一般解决方案。

首先,在现代c++中不应该再使用typedef(有更好的语法)。对于结构体,只需使用:

struct mystruct {
...
}

也可以考虑重新设计,这样你就不会有两个相互依赖的类型。如果不可能,那么就像其他人之前说的那样,向前声明类型。