我有以下课程:
class aClass {
public:
aClass():a(0){}
void print(){cout<<a<<endl;}
private:
int a;
};
在main()函数中,我意外地创建了一个这样的对象:
aClass obj();
我认为编译器会抛出一个错误,因为它需要调用默认的复制构造函数,但是括号()内部没有参数。有趣的是,根本没有错误。所以我尝试通过调用:
来访问成员函数obj.print();
现在它抛出了这个错误:
request for member 'print' in 'obj', which is of non-class type 'aClass()'
有人可以向我解释一下吗?什么是已创建的 obj()?
答案 0 :(得分:4)
aClass obj();
这是不由它的默认构造函数创建的类aClass的实例。
这是一个函数的函数原型,它不带参数并返回aClass。
答案 1 :(得分:1)
这是一个功能声明。
该语言允许其他函数内的函数声明;效果是在周围的命名空间中声明一个函数,但只是为了使该名称在声明的范围内可用。