Warum kann eine Forward-Deklaration nicht für einen std :: vector verwendet werden?

Wenn ich eine Klasse wie folgt erstelle:

// B.h
#ifndef _B_H_
#define _B_H_

class B
{
private:
    int x;
    int y;
};

#endif // _B_H_

und benutze es so:

// main.cpp
#include <iostream>
#include <vector>

class B; // Forward declaration.

class A
{
public:
    A() {
        std::cout << v.size() << std::endl;
    }

private:
    std::vector<B> v;
};

int main()
{
    A a;
}

Der Compiler schlägt beim Kompilieren fehlmain.cpp. Jetzt ist die Lösung, die ich kenne,#include "B.h", aber ich bin gespannt, warum es fehlschlägt. Wederg++ odercl 's Fehlermeldungen waren in dieser Angelegenheit sehr aufschlussreich.

Antworten auf die Frage(16)

Ihre Antwort auf die Frage