struct C ++中的类指针

时间:2015-05-24 13:43:16

标签: c++ class struct

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

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它是可能的,但是我无法正确地做到这一点。感谢

3 个答案:

答案 0 :(得分:10)

您需要使用转发声明

trait Alias: Trait<Item=char> {}
impl<T: Trait<Item=char>> Alias for T {}

现在,编译器知道class myclass; typedef struct { myclass *p; ... } mystruct; class myclass { private: mystruct *s; ... } 在第一次看到它时就是一个类。

此外,无需在C ++中使用typedef结构。你可以简单地写一下:

myclass

其中也是如此。

答案 1 :(得分:1)

通常,可以声明指向尚未定义的类的指针。你只需要声明&#34;&#34;类(类myclass)。

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

答案 2 :(得分:0)

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

struct mystruct {
...
}

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