一个编译异常分析

一个编译错误分析struct Test {Test (int){}Test(){}void fun(){}}int main(){Test a(1)//1a.fun()//2T

一个编译错误分析

struct Test 
{
Test (int){}
Test(){}
void fun(){}
};

int main()
{
Test a(1);   //1                                         
a.fun();     //2

Test b();    //3
b.fun();     //4

return 0;
}


1-4这四句的错误,请给出原因,谢谢
[解决办法]
都说得很清楚了啊,你应该自己思考啊。
2和4没什么区别啊,主要是1和3
第一句是申明一个对象,而第三句有歧义啊,你的编译器把它当成了一个函数声明,而不是定义一个b的对象。