问题很简单,我想我不能这样做:(我在头文件中)
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
它是可能的,但是我无法正确地做到这一点。感谢
答案 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 {
...
}
也可以考虑重新设计,这样你就不会有两种相互依赖的类型。如果它不可能,那么正如其他人所说的那样,在之前声明了类型。