2014-01-05 3 views
0

나는이 책에 따라 freind 함수 프로그램을 수행하고 프로그램에 대한 내 자신의 코드를 약간 수행했다. "room_num"이 선언되지 않았으며 인텔리 센스 식별자 "room_num"이 정의되지 않았기 때문에이 오류 메시지가 표시되기 때문에 퍼즐이 난다. 왜 이런 일이 일어나고 어떻게 해결해야하는지 이해하는데 도움이 필요합니다. 다음은 지난 3 주 동안 제가 작업 한 코드입니다.내가 얻는 오류 메시지를 이해하지 못한다

#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은 여전히 ​​당신이 인 경우로에서 room_num에 액세스하려고, HotelRoom의 방법이 아닙니다. 어떤 room_numHotelRoom 인스턴스 중 어느 것을 의미하는지 지정해야합니다. 아마도 return room_num 대신 return room_r1.room_num을 의미했을 것입니다.

Transfer 함수에서도 transroom 매개 변수를 사용하지 않고 에서 transroom_num을 사용합니다. 이것은 아마도 당신이 원하는 것이 아닙니다.

마지막으로 생성자를 구현하지 않았으며 DisplayRoomHotelRoom입니다. 코드를 컴파일하고 링크 할 수 있도록 메소드를 올바르게 구현하지 않은 한 아무것도하지 않거나 경고를 출력하는 스텁을 만들어야합니다.

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을 피하십시오.

관련 문제