Pourquoi pas une déclaration anticipée être utilisé pour un std::vector?

Si je créer une classe comme ceci:

//B.h
#ifndef _B_H_
#define _B_H_

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

#endif //_B_H_

et de l'utiliser comme ceci:

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

Le compilateur échoue lors de la compilation de main.cpp. Maintenant la solution je sais, c'est pour #include "B.h", mais je suis curieux de savoir pourquoi il échoue. Ni g++ ou cl's messages d'erreur ont été très éclairante à ce sujet.

  • Remarque vous pouvez passer une vector<T> dans une fonction avec seulement avant type déclaré T si vous passez comme un vector<T>& (mais pas vector<T> parce que nécessiterait une opération de copie)
InformationsquelleAutor Bernard | 2008-09-01