2017-10-13 62 views
1
#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); 
} 

我不understand..when我叫我做的发送对象(FistMan)..功能,为什么我的编译器还在说,我叫它没有对象?不能调用成员函数没有对象,但我调用该函数与对象

+0

使其成为静态。然后它会工作。 'static void DisplayAge(const Human&Person)'。在实用程序类中,在大多数情况下,所有函数都是静态的:) – tilz0R

+0

您没有用对象调用函数。类名不是一个对象。首先创建一个对象:'Utility myutility;'然后调用它的函数:'myutility.DisplayAge(FirstMan);'。 – Galik

+0

是啊,你是对的..谢谢你:) –

回答

4

DisplayAge in Utility is not a static function。因此,您需要实例Uitility才能调用它。

所以,要么使功能static,或通过匿名临时

Utility().DisplayAge(FirstMan); 

更妙的是调用它,使DisplayAgeHuman成员函数。

1

使用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); 
} 
+0

是啊,哇谢谢你! –

+0

我不会使用我的答案,因为这是一般不好的做法。使用@Bathsheba中的一个 – rak007

0

请勿使用类功能。使用命名空间:

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); 
} 
+0

“年龄”是私人的,如果不进行更多更改就不能访问。 – NathanOliver

+0

但是你不能'friend'命名空间;这在这里很重要。 – Bathsheba

相关问题