为什么这段代码的异常之处在语句3处,报错却在语句4行?

为什么这段代码的错误之处在语句3处,报错却在语句4行???struct test{test (int){}test (int){}void fun(){

为什么这段代码的错误之处在语句3处,报错却在语句4行???
struct test
{
  test (int){}
  test (int){}
  void fun(){}
}

int main()
{
  test a(1);//语句1
  a.fun(); //语句2
  test b(); //语句3
  b.fun(); //语句4
}

为什么这段代码的错误之处在 语句3 处,报错却在 语句4 行???

是什么原理???

[解决办法]
我以前也遇到过这样的问题;
test b(); //语句3
b.fun(); //语句4
 你以为你b是一个test对象? 你错了...
特么的 他居然是一个函数的声明 不管你信不信 他就是这样的 哪怕你test里有一个无参的构造函数 他还是一个返回值为test的函数...
[解决办法]
我同意这种说法,看到“test b();”的第一反应就是函数声明

探讨
我以前也遇到过这样的问题;
test b(); //语句3
b.fun(); //语句4
你以为你b是一个test对象? 你错了...
特么的 他居然是一个函数的声明 不管你信不信 他就是这样的 哪怕你test里有一个无参的构造函数 他还是一个返回值为test的函数...