对重载函数调用不明确有关问题

对重载函数调用不明确问题
编译的时候显示对重载函数调用不明确,求大神解答
#include <iostream>
#include "Circle2.h"
using namespace std;

void printCircle(Circle2 c)
{
cout << "The area of the circle of "
<< c.getRadius() << " is " << c.getArea() << endl;
}

void printCircle(Circle2 *c)
{
cout << "The area of the circle of "
<< c->getRadius() << " is " << c->getArea() << endl;
}

void printCircle(Circle2 &c)
{
cout << "The area of the circle of "
<< c.getRadius() << " is " << c.getArea() << endl;
}

int main()
{
Circle2 myCircle(5.0);
//printCircle(myCircle);   这句调用时显示对重载函数调用不明确,为什么?注释掉就好了

Circle2 myCircle2(10.0);
printCircle(&myCircle2);

Circle2 myCircle3(20.0);
printCircle(&myCircle3);
return 0;
}

------解决方案--------------------
#include <iostream>
#include "Circle2.h"
using namespace std;

void printCircle(Circle2 c)
{
cout << "The area of the circle of "
<< c.getRadius() << " is " << c.getArea() << endl;
}

void printCircle(Circle2 *c)
{
cout << "The area of the circle of "
<< c->getRadius() << " is " << c->getArea() << endl;
}

void printCircle(Circle2 &c)
{
cout << "The area of the circle of "
<< c.getRadius() << " is " << c.getArea() << endl;
}

int main()
{
Circle2 myCircle(5.0);
printCircle(myCircle);
        //编译器可以通过拷贝构造,再调用传值版本
        //编译器可以调用引用版本
        //你让编译器犯难了,哎! 


return 0;
}

------解决方案--------------------
C++ 引用只是别名。
引用不同于指针,不是一个独立类型。

引用参数和非引用参数的调用方式没有区别。
C++函数以调用方式区分,而不是以参数类型是否引用区分。

换句话说,形式才是主要的。
C++不会出现,同一调用形式,调用两种不同参数类型的函数的状态。

引用参数和非引用参数,不能形成两种不同的调用形式。

所以无法区分引用参数和非引用参数。




------解决方案--------------------
C++不会出现,同一调用形式,调用两种不同参数类型的函数的状态。
应该是:
C++不会出现,同一调用形式,调用两种兼容的不同参数类型的函数的状态。