请教这样子创建临时对象有什么有关问题

请问这样子创建临时对象有什么问题?
为什么会出现
//error: no matching function for call to 'Internet::Internet(Internet)'|
C/C++ code

#include <cstring>
#include <iostream>
using namespace std;

class Internet
{
public:
     Internet(char *name,char *address)
     {
        cout<<"载入构造函数"<<endl;
         strcpy(Internet::name,name);
     }
     Internet(Internet &temp)
     {
        cout<<"载入COPY构造函数"<<endl;
         strcpy(Internet::name,temp.name);
        cin.get();
     }
     ~Internet()
     {
        cout<<"载入析构函数!";
     }
public:
    char name[20];
    char address[20];
};

int main()
{
     Internet a=Internet("中国软件开发实验室","www.cndev-lab.com");
//error: no matching function for call to 'Internet::Internet(Internet)'|
    cout<<a.name;
    cin.get();

    return 0;
}



------解决方案--------------------
探讨
引用:

Internet(const Internet &amp;amp;temp)


请问为什么这样改了就没有错误了呢?