vs2010c++编译的时候出现error C2628: “void”是非法的,为什么?求指教解决方案

vs2010c++编译的时候出现error C2628: “void”是非法的,为什么??求指教
#include "stdafx.h"
#include "iostream"
#include "vector"
using namespace std;

struct Exmp1
{
Exmp1()//默认构造函数,
{
cout<<"Exmp1()"<<endl;
}
Exmp1(const Exmp1&)//复制构造函数
{
cout<<"Exmp1(const Exmp1&)"<<endl;
}
Exmp1& Exmp1::operator=(const Exmp1& rhs)//“=”-->赋值操作符的重载
{
cout<<"Exmp1& Exmp1::operator=(const Exmp1& rhs)"<<endl;
return *this;
}
~Exmp1()//析构函数
{
cout<<"~Exmp1()"<<endl;
}
}
void fun1(Exmp1 obj){};
void fun2(Exmp1& obj){};

Exmp1 fun3()//普通函数,返回Exmp1类型.无参
{  
Exmp1 obj;
return obj;
}
int main()
{
Exmp1 obj;//创建一个Exmp1的对象,这里调用了默认构造函数
Exmp1 eobj;
fun1(obj);//这里调用复制构造函数
fun1(eobj);
eobj=fun3();
Exmp1 *p=new Exmp1;//调用默认构造函数动态创建Exmp1类型的新对象
vector<Exmp1> evec(3);//创建一个存放Exmp1类型对象的容器并
delete p;//调用析构函数释放动态创建的内存
return 0;
}

------解决方案--------------------
请自行对比,func函数附近

C/C++ code

#include "iostream"
#include "vector"
using namespace std;

struct Exmp1
{
    Exmp1()//默认构造函数,
    {
        cout<<"Exmp1()"<<endl;
    }
    Exmp1(const Exmp1&)//复制构造函数
    {
        cout<<"Exmp1(const Exmp1&)"<<endl;
    }
    Exmp1& Exmp1::operator=(const Exmp1& rhs)//“=”-->赋值操作符的重载
    {
        cout<<"Exmp1& Exmp1::operator=(const Exmp1& rhs)"<<endl;
        return *this;
    }
    ~Exmp1()//析构函数
    {
        cout<<"~Exmp1()"<<endl;
    }
};
void fun1(Exmp1 obj){}
void fun2(Exmp1& obj){}

Exmp1 fun3()//普通函数,返回Exmp1类型.无参
{   
    Exmp1 obj;
    return obj;
}
int main()
{
    Exmp1 obj;//创建一个Exmp1的对象,这里调用了默认构造函数
    Exmp1 eobj;
    fun1(obj);//这里调用复制构造函数
    fun1(eobj);
    eobj=fun3();
    Exmp1 *p=new Exmp1;//调用默认构造函数动态创建Exmp1类型的新对象
    vector<Exmp1> evec(3);//创建一个存放Exmp1类型对象的容器并
    delete p;//调用析构函数释放动态创建的内存
    return 0;
}