Почему нельзя использовать прямое объявление для std :: vector?
Если я создаю такой класс:
// B.h
#ifndef _B_H_
#define _B_H_
class B
{
private:
int x;
int y;
};
#endif // _B_H_
и используйте это так:
// 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;
}
Сбой компилятора при компиляцииmain.cpp
, Теперь я знаю решение#include "B.h"
, но мне любопытно, почему это не удается. ниg++
или жеcl
Сообщения об ошибках были очень поучительными в этом вопросе.