Учитывая два класса шаблонов, каждый из которых имеет функции-члены, которые ссылаются на функции-члены в классе других, как это можно сделать? Если вообще. Используя декларацию forward, чтобы разрешить циклическую зависимость, означает, что определение недоступно для указанной функции-члена. Таким образом, возникает ошибка в отношении неявного экземпляра неопределенного типа. Определения функций-членов не могут быть перенесены в файл cpp с полными определениями классов, включенными вместо передовых объявлений, поскольку они должны существовать в заголовке, чтобы разрешить создание компилятора при использовании/вызове.Циклическая зависимость между функциями класса шаблона
template<typename T>
class A {
void foo(B &b) { b.bar(); };
void bar() {};
}
template<typename T>
class B {
void foo(A &a) { a.bar(); };
void bar() {};
}
Теперь я знаю, что первый ответ будет «изменить код», но я экспериментирую с чем-то, и это единственный способ, которым я могу видеть, чтобы заставить его работать. Поэтому меня интересует, возможно ли это на C++. Большое спасибо заранее!
'inline' сделать что-нибудь там? – Yakk
Проще, чем я думал! Я действительно не видел этого, так как настоящая проблема имеет классы в отдельных заголовочных файлах, но теперь это кажется совершенно очевидным. Поэтому я предполагаю, что я бы поменял класс B на включение, и использовать некоторые из них, чтобы избежать двойного включения определений. Отметьте как ответ, как только я смогу дать ему сегодня вечером. Благодаря! – NitrousUK
@Yakk: Паритет. Исходный код имел определения 'inline', поэтому я не хотел его изменять. –