Не понимаю сообщение об ошибке, которое я получаю

0

Я делаю программу функций freind в соответствии с этой книгой, которую я имею, и я сделал немного своего кода в программе. Я головоломка, потому что я получаю сообщение об ошибке, что "room_num" не объявлен, а идентификатор intellisense "room_num" не определен. Мне нужна помощь в понимании, почему это происходит и как это исправить. Вот код, над которым я работал в течение трех недель.

 #include "stdafx.h"
 #include <iostream>
 #include <iomanip>


 using namespace std;

 class HotelRoom
{
friend int Transfer( HotelRoom&, int);
 private:
int room_num; 
int transroom_num;
int room_cap;
int occup_stat;
double daily_rt;


public:
HotelRoom(int room, int roomcap, int occup,  int transroom, double rate = 89.00);
~HotelRoom();
int Display_Number();  //Displays room number and add the method Display_Guest()
int Get_Capacity();
int Get_Status();
double Get_Rate();
int Change_Status(int);
double Change_Rate(double);
void Display_Guest();
};

 HotelRoom::~HotelRoom()
{
cout << endl<<endl;
cout << "Guest in room "<<room_num << " has checked out." <<endl;
}

 int HotelRoom::Display_Number()
{
return room_num;
}

 int HotelRoom::Get_Capacity()
{
return room_cap;
}

 int HotelRoom::Get_Status()
{

return occup_stat;
}



    int HotelRoom::Change_Status(int occup)
{
occup_stat = occup;

if (occup > room_cap)
{
    return -1;
}
else

return occup_stat;

   }

   double HotelRoom::Get_Rate()
  {
return daily_rt;
  }

   double HotelRoom::Change_Rate(double rate)
  {
daily_rt = rate;
    return daily_rt;
  }

   int Transfer(HotelRoom& room_r1, int transroom)

  {
//if guest transfers to different hotel room, room is vacant and transroom is now        occupied
room_r1.room_num = room_r1.transroom_num;



return room_num;

  }


   int main()
 {
cout<< setprecision(2)
    <<setiosflags(ios::fixed)
    <<setiosflags(ios::showpoint);

   int room = 0; 
   int roomcap = 4;
   int transroom;
   int occup;
   double rate = 89.00;


   cout<<"\nEnter the room number: "<<endl;
   cin>>room;

   cout<<"\nEnter the amount of guest to occupy this room: "<<endl;
   cin>>occup;


   cout<<"\nThe guest has decided to transfer rooms"<<endl;
   cout<<"\nEnter the room to transfer the guest to"<<endl;
   cin>>transroom;

   HotelRoom room1(room,roomcap, occup, transroom, rate ); //initialize the object

   if (room1.Change_Status(occup) == -1)
   {
cout<<"You have exceeded the room capacity"<<endl;
   }
   else
   {

    cout <<"\nThe room number is ";
    room1.Display_Number();
    cout<<"."<<endl;
    cout<<"\nThe name of the primary guest is ";
    room1.Display_Guest();
    cout <<"."<<endl;
    cout<<"\nThe number of guest in the room is "<<room1.Change_Status(occup)<<"."    <<endl;
   cout<<"\nThe daily rate for room "<<room<< " is "<<room1.Get_Rate()<<"."<<endl<<endl;



   cout<<"\nYou have tranferred the guest from room"<<room1.Display_Number()<<"to"     <<Transfer(room1,transroom)<<endl;
    }

     cout<<"\nRoom ";
     room1.Display_Number();
     cout<<" is vacant."<<endl;

     system("PAUSE");


return 0;
    }
  • 2
    Было бы полезно, если бы вы включили трассировку стека или могли указать, где в вашей программе обнаружена ошибка.
  • 0
    В дополнение к полному сообщению об ошибке вы должны также использовать правильный и последующий отступ.
Показать ещё 1 комментарий
Теги:

3 ответа

0

Поскольку вы новичок, я просто буду придерживаться функций-членов и частных переменных класса, пока вы не улучшаетесь.

Что касается сообщения об ошибке, я предполагаю, что внутри функции, которой вы пользуетесь room_num, нет доступа к частным частям класса HotelRoom. Заметьте, я сказал, предположим, что, потому что вы должны скопировать и вставить текст в окне вывода здесь, чтобы мы могли видеть, что именно происходит.

0

Во-первых, вы должны определить, что room_num является переменной-членом класса.

int Transfer(HotelRoom& room_r1, int transroom)
{
    room_r1.room_num = room_r1.transroom_num;


    //because room_num is not non class member variable, you have to write like below.
    return room_r1.room_num;
    //return room_num;
}

Во-вторых, вы не HotelRoom::HotelRoom(int,int,int,int,double) определение HotelRoom::HotelRoom(int,int,int,int,double), HotelRoom::Display_Guest(void). Поэтому вам нужно написать этот конструктор и функцию, чтобы избежать ошибки LNK2019.

0

Функция Transfer не является методом HotelRoom, но вы пытаетесь получить доступ к room_num в нем, как если бы это было так. Вам нужно указать, в каком room_num HotelRoom вы HotelRoom экземпляр HotelRoom. Вероятно, вы имели в виду return room_r1.room_num вместо return room_num.

Также в вашей функции Transfer вы никогда не используете параметр transroom, вместо этого вы используете transroom_num из room_r1. Это, вероятно, не то, что вы хотите.

Наконец, вы не реализовали конструктор и DisplayRoom of HotelRoom. Вы должны создать заглушки, которые ничего не делают или не печатают предупреждения, если вы не правильно применяли эти методы, поэтому вы можете, по крайней мере, скомпилировать и связать код.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню