void Patient::Allocate_Bed (void){
int i,j,k;
--------------------
int main (void){
Ward Hospital[13];
Patient Details[13];
char Option;
int i, j;
You never intialize i, j, k in Allocate_Bed(), nor i, j in main(), and since you never assign them a value, they contain junk values. (You should always initialize variables with 0 until you assign them a value.) So, in these lines:
Code:
case 's': Hospital[j].Bed_Status();
break;
case 'a': Details[i].Allocate_Bed();
break;
case 'd': Details[i].Discharge();
break;
Hospital[j] has an index that is some random junk value, and it certainly does not correspond to Details[i] whose index is another random junk value, and both will most likely be out of bounds; the indexes for Hospital and Details must be between 0 and 12. The compiler allows you to use indexes that are out of bounds, so you won't get a compiler error, but at runtime bad things happen, and the program will fail.
Code:
switch(Key){
case 'g':Good_Condition();
break;
There is no global function Good_Condition(). It's a class function and must be called on a class object, e.g.
a_Ward.Good_Condition();