我在类a中放了几个类b的实例,但这会导致错误,因为类a不知道b是什么类。
现在我知道我可以通过编写我的文件来解决这个问题,但这会弄乱可达性并使我烦恼。我知道我可以对我的函数进行原型设计,因此我没有遇到这个问题,但却找不到关于如何对类进行原型设计的材料。
有没有人在c ++中有一个类原型的例子。
因为似乎有些困惑让我告诉你我想要什么class A
{
public:
B foo[5];
};
class B
{
public:
int foo;
char bar;
}
但是这不起作用,因为A看不到B所以我需要在它们之前放一些东西,如果它是一个函数我会放A();然后再实施。我怎么能在课堂上做到这一点。
答案 0 :(得分:19)
您可以声明所有类,然后按任意顺序定义它们,如下所示:
// Declare my classes
class A;
class B;
class C;
// Define my classes (any order will do)
class A { ... };
class B { ... };
class C { ... };
答案 1 :(得分:4)
您正在寻找声明。
class A;
class B {
A MakeA();
void ProcessA(A a);
};
class A {
B bs[1000];
};
如果你转发声明一个类,你可以
declare functions taking and returning it or complex types made of it
declare member variables of pointer or reference to it
这基本上意味着在任何情况下,不会以B内部的A实例结束,反之亦然,您应该能够声明和定义A和B之间的任何接口。
答案 2 :(得分:2)
解决循环依赖关系的常用方法是使用前向声明:
// Bar.h
class Foo; // declares the class Foo without defining it
class Bar {
Foo & foo; // can only be used for reference or pointer
};
// Foo.h
#include <Bar.h>
class Foo {
Bar bar; // has full declaration, can create instance
}
您可以在另一个文件中提供完整的声明和定义。使用forward声明,您可以创建指向该类的指针和引用,但是您无法创建它的实例,因为这需要完整的声明。
答案 3 :(得分:1)
class b;
class a {
public:
b * inst1;
};
class b{
....
};
这是你需要的吗?