首页 > 解决方案 > 为什么我不能使用 A 的对象调用 showA()?

问题描述

为什么我们可以在没有对象的情况下调用 showA() 方法?但是如果我在方法定义中使用 void A::showA(A& x) 那么我必须使用 A 的对象来调用它,为什么?

#include <iostream> 

class A { 

public:
    int a;
    A() { a = 0; } 


     void showA(A&); 
}; 

void showA(A& x) 
{ 

    std::cout << "A::a=" << x.a; 
} 

int main() 
{ 
    A a; 
    showA(a); 
    return 0; 
}

标签: c++scope-resolution-operator

解决方案


为什么我们可以在showA()没有对象的情况下调用方法?

您不调用成员函数A::showA,而是调用自由函数showA。实际上,成员函数A::showA(A&)是声明的,但从未定义,只有自由函数showA(A&)有定义。

如果你想调用A::showA,你需要一个定义;

void A::showA(A& x) { /* ... */ }
//   ^^^ this makes it a member function definition

然后将其称为

A a;

a.showA(a);

a(请注意,将实例传递给A::showA在相同实例上调用并没有多大意义a,但这是另一个问题)。


推荐阅读