不理解我收到的错误消息
Not understanding the error message I'm getting
我根据这本书做了一个朋友函数程序,我对程序做了一些我自己的代码。我很困惑,因为我收到此错误消息,指出"room_num"未声明,智能感知标识符"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;
}
函数 Transfer
不是一种HotelRoom
的方法,您仍然试图访问其中的room_num
,就好像它是一样。您需要指定您指的是哪个HotelRoom
实例的哪个room_num
。可能你的意思是return room_r1.room_num
而不是return room_num
.
同样在Transfer
函数中,您从不使用参数 transroom
,而是使用 room_r1
中的transroom_num
。这可能不是您想要的。
最后,您还没有实现HotelRoom
的构造函数和DisplayRoom
。你应该创建一个存根,只要你没有正确实现这些方法,它什么都不做或打印警告,所以你至少可以编译和链接代码。
由于您是初学者,因此我会坚持使用成员函数和类私有变量,直到您做得更好为止。
就错误消息而言,我的猜测是您正在使用的函数内部room_num无法访问 HotelRoom 类的私有部分。 请注意,我说的是猜测,这是因为您应该将文本复制并粘贴到此处的输出窗口中,以便我们可以看到到底发生了什么。
首先,您必须确定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。
- C++错误消息*成员参考.**初学者*
- 如何通过参数抛出错误消息
- glad 导致 glfwSwapBuffers 返回错误消息
- FindPackageHandleStandardArgs.cmake:137 的 CMake 错误(消息):找不到 Boost (缺少:正则表达式)(找到合适的版本"1.72.0",
- 如何接受 [ENTER] 键作为无效输入并发送错误消息
- 重新定义预定义的 errno 错误消息 (E2BIG)
- SDL 映像:无法打开映像,仅显示错误消息
- 错误消息:使用"string* +="后"no match for 'operator+='"
- 错误消息"expected expression"....有人知道它为什么这么说吗?
- 在 Eclipse: "error: no match for 'operator='" 中获取错误消息
- GCC 警告和 gcc 错误消息之间的区别
- 为 c++ cin 上的输入数无效生成错误消息
- 来自带有mbedtls TLS的Mongoose Web服务器的错误消息
- 如何使用realsense摄像头调试ROS错误消息
- C++ 概念 - 需要括号中的概念会导致 2 条冲突的错误消息
- 编译器收到错误消息(textc.exe已停止)
- 结构数组的构造函数错误,错误消息:没有构造函数实例与参数列表匹配
- 使用 c++/WinRT Direct3D UWP Game DR 模板 Direct X11 的错误消息
- max_element() 给出非常奇怪的错误消息
- 不断收到错误消息,并非所有控制路径都返回值