Если я правильно понимаю ситуацию, похоже, у вас есть объявление класса для Edge в .cpp, а не в .h (что тогда в заголовке?).Ошибка в Vertex возникает потому, что когда компилятор ищет класс Edge, он не может найти объявление в заголовке Edge - другими словами, он скрыт.Ваше объявление класса Edge должно быть в заголовочном файле, а определение должно быть в .cpp.Также обратите внимание, что это хороший случай циклических зависимостей, которые часто могут привести к боли.Смотрите, если вы не можете их сломать.
Редактировать: Спасибо за то, что выложили точную ошибку, это в значительной степени подтвердило все наши догадки.Убедитесь, что оба класса могут видеть друг друга - убедитесь, что Vertex включает заголовок Edge.Если классы достаточно малы, вы можете поместить их оба в один файл, как предложил Фалмарри.Также не забудьте использовать форвардные объявления для решения этих типов циклических зависимостей.Вы можете пересылать объявление, если в ваш класс включены указатели или ссылки на внешний класс, но он не работает с реальными объектами (такими как Edge edge;
) в вашем классе.Я полагаю, что причина этого в том, что указатели и ссылки являются просто адресами, поэтому компилятору не нужно знать о внутренностях, но чтобы использовать реальный объект, вы должны знать, что внутри.