Search code examples
c++classvisual-studio-2012prototyping

C++ Class Prototyping


Am I missing something here?

class Foo;

class Bar {
    public:
        Foo foo;
};

class Foo { };

Error:

error C2079: 'Bar::foo' uses undefined class 'Foo'


Solution

  • When you forward-declare a class, you can make pointers and references to it, but you cannot make members of the type of forward-declared class: the full definition of Foo is needed to decide the layout of the outer class (i.e. Bar), otherwise the compiler cannot make a decision on the size and the structure of Bar.

    This is allowed, though:

    class Foo;
    
    class Bar {
        public:
            Foo* fooPtr;
            Foo& fooRef;
    };
    

    The reason the pointers and references to forward-declared classes are allowed is that the sizes of pointers and references do not depend on the structure of the class to which they point (or which they reference).