Class struct C++ 中的指针

Class pointer inside struct C++

问题很简单,我想我做不到:(我在头文件中)

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

class myclass {
     private:
          mystruct *s;
          ...
}

因为当编译器到达结构时它不知道我的class 是什么,但出于同样的原因我也不能做相反的事情:

class myclass {
     private:
          mystruct *s;
          ...
}

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

我怎样才能做到这一点?我猜想在 class(2 个示例)之前有一些方法可以说编译器 "There is an struct called mystruct",所以它知道 mystruct *s 是可能的,但我无法做到正确。谢谢

您需要使用前向声明:

class myclass;

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

class myclass {
     private:
          mystruct *s;
          ...
}

现在编译器在第一次看到 myclass 时就知道它是一个 class。


此外,无需在 C++ 中对结构进行 typedef。你可以简单地写:

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

也一样。

通常,可以声明一个指向尚未定义的 class 的指针。您只需要 "declared" class (class myclass).

这是使用交叉引用定义 classes 的一般解决方案。

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

struct mystruct {
...
}

也可以考虑重新设计,这样您就不会有 2 种类型相互依赖。如果不可能,那么就像其他人所说的那样,在前面声明类型。