簡體   English   中英

如何將成員函數帶入范圍?

[英]How to bring member function in scope?

因此,我正在調用一個函數,該函數將輸入作為限制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超出范圍。 成績也是私人成員,但由成員函數調用。 那么,為什么它表明不能打分數。 請告訴我為什么,如何解決? Edit1:將函數聲明為靜態無效無濟於事,因為編譯器顯示無法將函數聲明為靜態無效。

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(i, h);

應該在特定對象上調用非靜態成員函數,例如:

h[i].grade_print(i, h);

但是,在您的情況下,grade_print必須是靜態的,因此應這樣聲明:

static void grade_print(int,hotel []);

和定義一樣正常。 另外,在將grade_print設為靜態之后,您必須像這樣調用它:

hotel::grade_print(i, h);

據我所知, grade_print打印出有關作為參數傳遞的一組酒店的信息。 如果您有一個作用於特定類組的函數,則該函數不應是該類的成員。 相反,它應該只是一個不與任何類關聯的函數。 這還將解決您的范圍問題,因為它將具有全局范圍。

如果我的論點看起來很怪異,請這樣考慮。 假設我有一個名為number的類,以及一個名為print_nums的函數,該函數打印傳遞給它的numbers數組。 我將使print_nums成為全局函數還是類number的成員? 第一個吧? 第二個雖然可行,但實際上沒有任何意義。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM