2014-01-05 7 views
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

Было бы полезно, если бы вы включили трассировку стека или могли бы указать, где в вашей программе встречается ошибка. – STLDeveloper

+0

В дополнение к сообщению о полной ошибке вы также должны использовать правильный и последующий отступ. – Nabla

+0

Вы должны научиться готовить [минимальные полные примеры] (http://sscce.org). Это умение, более ценное, чем знание конкретной ошибки компилятора. – Beta

ответ

0

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

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

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

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::Display_Guest(void). Поэтому вы должны написать этот конструктор и функцию, чтобы избежать ошибки LNK2019.

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