无法在没有对象的情况下调用成员函数,但我用一个对象调用该函数

时间:2017-10-13 13:14:49

标签: c++

$parsers

我不明白..当我调用该函数时,我发送了一个对象(FistMan)..为什么我的编译器仍然说我没有对象地调用它?

3 个答案:

答案 0 :(得分:4)

DisplayAge中的{p> Utility 一个static函数。因此,您需要Uitility实例才能调用它。

所以,要么创建函数static,要么通过匿名临时

调用它
Utility().DisplayAge(FirstMan);

更好的是,让DisplayAge成为Human的成员函数。

答案 1 :(得分: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);
}

答案 2 :(得分: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);
}