Вы используете предварительную декларацию:
class Traingle;
class Vertex
{
...
};
class Triangle
{
...
};
Предварительное объявление типа (например, class Triangle
) позволяет вам объявлять указатели или ссылки на этот тип, но не объекты типа. Другими словами
class Triangle;
class Vertex
{
vector<Triangle*> face;
};
скомпилирует, но
class Triangle;
class Vertex
{
vector<Triangle> face;
};
не скомпилируется.
Кроме того, предварительное объявление типа не позволяет вам получить доступ к его элементам, потому что компилятор еще не знает о них. Таким образом, функции-члены, которые используют объекты объявленного в прямом направлении типа, должны быть определены после того, как тип полностью определен. В вашем случае после определения class Triangle
.
О, и это совсем не относится к Visual Studio. Это просто стандартный C ++.