![](/img/trans.png)
[英]error: cannot call member function without object - but I have an object?
[英]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.