首页 > 试题广场 >

以下代码有什么问题?

[单选题]
以下代码有什么问题?
struct Test
 {
     Test( int ) {}
     Test() {}
     void fun() {}
 };
 void main( void )
 {
     Test a(1);
     a.fun();
     Test b();
     b.fun();
 }

  • b.fun()会出错
  • Test结构的定义中应该加上public修饰符,这样才能main函数中调用改类的方法
  • Test(int){} 应该改成Test(int a){}
  • 以上说法都不正确
Test a(1); //新建了一个对象
a.fun(); //因此可以调用函数
Test b(); //声明了一个函数,并没有新建对象
b.fun(); //没有新建对象,则不能调用函数
编辑于 2015-10-16 13:04:43 回复(4)
其实Test b();并不会出错,只不过是声明了一个函数b返回类型为Test,但是b.fun()会出错
发表于 2015-07-25 18:18:42 回复(7)
 Test b(); 
request for member 'fun' in 'b', which is of non-class type 'Test()'
默认构造函数直接写 Test b;就可以


发表于 2015-03-30 10:42:56 回复(2)
调用默认的构造函数,一定不能加括号
发表于 2016-06-11 16:25:05 回复(0)
一不小心就错了!关键要看题目考察的本质!
本质:类对象的声明中加小括号{}和不加小括号{}的区别:不加小括号{}表示实例化了一个类对象,调用默认构造函数;加小括号{}则表示声明了一个函数,参数为空,返回类型为类类型。
所以,Test b();运行后不会出现问题,而后面的b.fun()由于b不是类对象,不能调用类成员函数而导致编译错误!
发表于 2016-07-31 15:55:57 回复(0)
Test b()是声明了一个返回类型为Test的函数,千万不要认为是生命了一个对象b,而调用的是默认构造函数,利用默认构造函数声明对象时,为Test b;
发表于 2016-03-19 00:31:05 回复(0)
关键字是struct呀,不是class。。。。
发表于 2017-08-03 22:23:03 回复(0)
A错,Test b()并不会报错,但是b.fun()就会报错,是因为Test b()是声明一个函数b(),其返回类型为Test,这样调用fun()函数的话就会报错
发表于 2015-08-18 14:49:15 回复(0)
Test a(1);     //表示新建一个类对象
a.fun();        //调用类对象a的fun函数
Test b();        //声明一个函数返回值为Test,若新建一个对象则应该是 Test b;
b.fun;            //不存在类对象b,所以会报错
发表于 2019-06-18 21:01:13 回复(0)
这题有点坑啊
发表于 2017-03-16 10:30:00 回复(0)
<p>类的实例化调用默认构造函数时一定不能加空括号,否则就变成了函数声明。</p><p><br></p>
发表于 2020-04-28 10:46:23 回复(0)
注意Test b( );与Test b;的区别。
Test b( );是声明了一个返回类型为Test的函数,而Test b;才是真正的创建对象。
发表于 2018-12-14 15:13:22 回复(0)
若Test b(),写成Test b 形式的话,b就可以认为是一个对象。
发表于 2017-03-26 21:24:50 回复(0)
b.fun()报错,
 left of '.fun' must have class/struct/union type
发表于 2015-08-12 18:50:49 回复(0)
结构体中默认访问控制为public,类中为private
发表于 2018-10-31 20:30:23 回复(0)
Test b();    //声明了一个返回Test类的函数
b.fun();    //出错
发表于 2017-11-02 21:27:08 回复(0)
test b()定义了一个函数, 调用默认构造不加括号
发表于 2020-02-11 12:37:20 回复(0)
VOA头像 VOA
用默认的构造函数创建对象是不用加括号的,加了括号就是申明函数!
发表于 2019-12-15 19:18:08 回复(0)
Test b()改成Test b  
就对了
发表于 2019-03-18 20:28:56 回复(0)
int *p=new int(10); 初始化
发表于 2018-06-10 10:01:41 回复(0)