В моей математической библиотеке, которую я создаю на C++, у меня есть класс Quaternion и класс Vector3. Они раскладывают так:Круговые зависимости между встроенными файлами
Vector3.hpp:
#pragma once
template<typename T>
struct Vector3
{
//...
};
template<typename T>
Vector3<T> operator+(Vector3<T> lhs, Vector3<T> rhs);
#include "Vector3.inl"
Vector3.inl
template<typename T>
Vector3<T> operator+(Vector3<T> lhs, Vector3<T> rhs)
{
return Vector3<T>(lhs.x+rhs.x, lhs.y+rhs.y, lhs.z+rhs.z);
}
//...
Quaternion
класс выложенный то же самое.
В настоящее время у меня есть класс Quaternion
с использованием класса Vector3
для параметров функции, поэтому он #include
с заголовком Vector3.hpp
. Но теперь мне нужно использовать класс Quaternion
в моем классе Vector3
для реализации определенных функций.
Поскольку это необходимо только для реализации функций, я обычно просто помещал #include
в исходный файл, но поскольку я использую встроенные файлы, и они включены в заголовок, вызывает кучу ошибок компилятора, потому что они зависят друг от друга.
Как вы решаете такую циклическую зависимость, когда я могу использовать только заголовочные/встроенные файлы?
Почему вы * должны * использовать только заголовочные/встроенные файлы? По крайней мере, вам стоит переместить строку '#include 'Vector3.inl' из' Vector3.hpp' в файл '.cpp' пользователя. – harper