读书人

关于无参构造函数的调用,该如何处理

发布时间: 2012-03-22 17:43:57 作者: rapoo

关于无参构造函数的调用

C/C++ code
// ptr_fun example#include <iostream>using namespace std;class Object{    public:        Object(){};        ~Object(){};        void Function()        {            cout<<"the function called!"<<endl;        }};int main () {  Object ob1();//为什么不能这样写?  Object ob2;  ob1.Function();//编译报错信息为: request for member 'Function' in 'ob1', which is of non-class type 'Object()'|  ob2.Function();  return 0;}



[解决办法]
Object ob1();//为什么不能这样写?
函数声明

不能加括号


[解决办法]
恩,Object ob1(); 会把ob1声明成一个函数的名字了,可以通过编译。ob1.Function();而对于一个函数名是不可以这样调用的
[解决办法]
Object ob1();
调用函数的话是没有前面的类型名的。所以这并不是调用构造函数。
这是声明了一个返回Object类型的ob1函数。
[解决办法]
就像你调用ob2对象的成员函数是这样的ob2.Function();
并没有这样写void ob2.Function().
再者说构造函数是没有返回值的。
[解决办法]
Object ob1();//为什么不能这样
上面的语句不是定义Object类的对象ob1,而是声明一个普通的函数ob1(),此函数的返回值为Object类型。
[解决办法]
这是人为的语法规定,没有道理可讲。

那样的写法就是声明了一个名字为ob1的函数,其返回值为Object类型。
[解决办法]
声明成函数了

读书人网 >C++

热点推荐