Cyclic dependency occurs when an activity/task is already a successor to another, and tries to be a predecessor at the same time. Even if the activity/task is not a direct successor of another, if they have successor activities in between, the same behavior will happen.
Cross-dependencies are dependencies between tasks from different activities.
The dependencies of activities are dominant over those of tasks, in the case of cross-dependencies. By dominant, we mean that if Activity 1 is a predecessor of Activity 2, then all tasks under Activity 1 are also predecessors of Activity 2.
Fig. Cyclic Dependency when trying to make 2c as predecessor of 1c
In this example, Activity 1 is a successor of Activity 2. Therefore, inherently, Tasks 1a, 1b and 1c are all predecessors of Tasks 2a, 2b and 2c. Thus, when we try to make 2c as a predecessor of 1c, cyclic dependency occurs and the error message is shown.