2012-06-20 2 views
0
//A.h 
class B; 
class A{ 
    void Stuff(); 
    B* FOO(): 
    B* _b; 
} 
extern A* A_A(); 

//A.cpp 
#include "A.h" 
#include "B.h" 
B* A::FOO(){ 
    return(_b); 
} 

//B.h 
class B{ 
void BOO(); 
} 

//B.cpp 
#include "A.h" 
#include "B.h" 
void B::BOO(){ 
A_A->Stuff(); 
} 

Здесь есть кросс-файл .h файлов из .cpp-файлов. Поэтому они оба зависят друг от друга. Хотя использование прямого объявления и указателей кажется, что это нарушит цикл. Поэтому мой вопрос: это круговая зависимость? Зачем?Это круговая зависимость

+0

Я не вижу никаких проблем, кроме A :: Материал не определен. В чем дело? – Dani

+0

Здесь на работе есть некоторые люди в моей группе, которые называют это циклической зависимостью. Я не думаю, что это так, я хочу дважды проверить кого-то, прежде чем говорить. – user1470149

ответ

0

Вы нарушили круглые , включив в цепочку цепочку с передовыми объявлениями, но у вас все еще есть логическая круговая зависимость между A и B. Каждому они требуют вещи, предоставляемые другим классом.

Что касается вашего комментария выше, вы никогда не стесняетесь принести вопросы своей команде. Если узнаете, что вы ошибались, то вы что-то узнали.

1

Когда A зависит от B и наоборот, у вас есть круговая зависимость, по определению. Тот факт, что вы можете заставить его работать с форвардной декларацией, не меняет этого факта.

Смежные вопросы