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 种类型相互依赖。如果不可能,那么就像其他人所说的那样,在前面声明类型。
问题很简单,我想我做不到:(我在头文件中)
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 种类型相互依赖。如果不可能,那么就像其他人所说的那样,在前面声明类型。