簡體   English   中英

沒有對象就無法調用成員函數,但是我有一個對象才能調用該函數

[英]Cannot call member function without object but I call the function with an object

#include <iostream>
#include<string>
using namespace std;

class Human
{
private:
    string Name;
    int Age;
    friend class Utility;
public:
    Human(string InputName,int InputAge)
    {
        Name = InputName;
        Age = InputAge;
    }
};
class Utility
{
public:
    void DisplayAge(const Human& Person)
    {
        cout<<Person.Age<<endl;
    }
};
int main()
{
    Human FirstMan("Adam",25);
    cout<<"Accessing private member Age via friend class: ";
    Utility::DisplayAge(FirstMan);
}

我不明白..當我調用函數時,我確實發送了一個對象(FistMan)..為什么我的編譯器仍然說我在沒有對象的情況下調用它?

Utility DisplayAge 不是 static函數。 因此,您需要一個Uitility 實例才能調用它。

因此,請將函數static ,或通過匿名臨時函數調用它

Utility().DisplayAge(FirstMan);

更妙的是,使DisplayAge成為Human的成員函數。

使用static關鍵字,然后就可以在類上調用函數

我在下面編輯了您的代碼:

#include <iostream>
#include<string>
using namespace std;

class Human
{
private:
    string Name;
    int Age;
    friend class Utility;
public:
    Human(string InputName,int InputAge)
    {
        Name = InputName;
        Age = InputAge;
    }
};

class Utility
{
friend class Human;
public:
    Utility() = default;
    static void DisplayAge(const Human& Person)
    {
        cout<<Person.Age<<endl;
    }
};

int main(void)
{
    Human FirstMan("Adam",25);
    cout<<"Accessing private member Age via friend class: ";
    Utility::DisplayAge(FirstMan);
}

只要要定義函數,就不要使用類。 使用名稱空間:

namespace Utility
{
    inline void DisplayAge(const Human& Person)
    {
        cout<<Person.Age<<endl;
    }
}

int main()
{
    Human FirstMan("Adam",25);
    cout<<"Accessing private member Age via friend class: ";
    Utility::DisplayAge(FirstMan);
}

暫無
暫無

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

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