gpt4 book ai didi

c++ - 如何将成员函数引入作用域?

转载 作者:太空宇宙 更新时间:2023-11-04 12:52:26 25 4
gpt4 key购买 nike

所以我调用了一个函数,它将输入作为极限 i,对象数组 h。

#include<iostream>
#include<vector>
using namespace std;
class hotel
{
private:
string name,add;
char grade;
int charge,no;
public:
void getdata();
void putdata();
void grade_print(int,hotel[]);
void room_charge();
void top2();
};
void hotel::getdata()
{
cout<<"Add Name: ";
getline(cin>>ws,name);
cout<<"Add Addres: ";
getline(cin>>ws,add);
cout<<"Enter grade,room charge and no. of rooms: ";
cin>>grade>>charge>>no;
}
void hotel::putdata()
{
cout<<name<<endl<<add<<endl<<grade<<endl<<charge<<endl<<no;
}
void hotel::grade_print(int num,hotel h[])
{
int i,j,k; char val;
for(i=0;i<num;i++)
{
val=h[i].grade;
for(j=0;j<num;j++)
{
if(h[j].grade==val)
{
cout<<h[j].grade<<endl;
h[j].grade=' ';
}
}
}

}
int main()
{
std::vector <hotel> h(1);
int i=0,j;
cout<<"Want to add hotel? Press 1: ";
cin>>j;
while(j==1)
{
h[i].getdata();
h.resize(2);
i++;
cout<<"Want to add more? Press 1 for yes, 0 for no: ";
cin>>j;
}
grade_print(i,h);
}

此处的错误显示 grade_print 超出范围。等级也是私有(private)成员,但由成员函数调用。那么为什么会显示等级不能调用呢。请告诉我为什么会这样,我该怎么做才能解决它?Edit1:将函数声明为 static void 没有帮助,因为编译器显示函数不能声明为 static void。

D:\C++ Programs\testfile.cpp|30|error: cannot declare member function 'static void hotel::grade_print(int, hotel*)' to have static linkage [-fpermissive]|

最佳答案

据我所知,grade_print 打印出有关作为参数传递的一组酒店的信息。如果您有一个函数作用于某个类的一组,则该函数不应该是该类的成员。相反,它应该只是一个不与任何类关联的函数。这也解决了您的范围问题,因为它将具有全局范围。

如果我的论点看起来很奇怪,请这样想。假设我有一个名为 number 的类,以及一个名为 print_nums 的函数,该函数打印传递给它的 numbers 数组。我会将 print_nums 设为全局函数,还是 number 类的成员?第一个,对吧?第二个虽然可行,但实际上没有意义。

关于c++ - 如何将成员函数引入作用域?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48369545/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com