Class prototyping

随声附和 提交于 2019-11-30 08:24:08

问题


I have put several instances of class b in class a but this causes an error as class a does not know what class b is.

Now I know I can solve this problem by writing my file b a c but this messes up the reachability as well as annoys me. I know I can prototype my functions so I do not have this problem but have been able to find no material on how to prototype a class.

does anyone have an example of class prototyping in c++.

as there seems to be some confusion let me show you what i want

class A
{
public:

B foo[5];

};

class B
{
public:
int foo;
char bar;
}

but this does not work as A cannot see B so i need to put something before them both, if it was a function i would put A(); then implement it later. how can i do this with a class.


回答1:


You can declare all your classes and then define them in any order, like so:

// Declare my classes
class A;
class B;
class C;

// Define my classes (any order will do)
class A { ... };
class B { ... };
class C { ... };



回答2:


You're looking for declarations.

class A;
class B {
    A MakeA();
    void ProcessA(A a);
};
class A {
    B bs[1000];
};

If you forward declare a class, you can

declare functions taking and returning it or complex types made of it
declare member variables of pointer or reference to it

This basically means that in any case which doesn't end up with instances of A inside B and vice versa, you should be able to declare and define any interface between A and B.




回答3:


The usual way to resolve circular dependencies is to use a forward declaration:

// 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
}

You can provide a full declaration and definition in another file. Using the forward declaration, you can create pointers and references to the class, but you cannot create instances of it, as this requires the full declaration.




回答4:


class b;

class a {
public:
     b * inst1;
};
class b{
....
};

Is this what you needed ?



来源:https://stackoverflow.com/questions/6187974/class-prototyping

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!