一些关于我不明白的默认构造函数

我有这个代码:

#include <iostream> class ZombieFetus{ private: public: ZombieFetus(); }; ZombieFetus::ZombieFetus(){ std::cout << "http://www.metal-archives.com/band/view/id/55878" << std::endl; }; class FaceOfAVirus{ private: public: FaceOfAVirus(int); }; FaceOfAVirus::FaceOfAVirus(int i){ std::cout << "http://www.metal-archives.com/band/view/id/74239" << std::endl; }; int main(int argc, char **argv){ std::cout << "some random bands :" << std::endl; ZombieFetus band1(); FaceOfAVirus band2(0); } 

编译:

 $ g++ main.cc -Wall 

当我运行它时,我得到了:

 some random bands : http://www.metal-archives.com/band/view/id/74239 

什么与ZombieFetus band1(); ? 什么程序? 这是一个初学者的问题,如果它已经在stackoverflow上回答,plz给我的链接…我没有find答案…

thx给所有回答的人和所有的评论者

(你有点太多,一个接一个)

问题是这样的:

 ZombieFetus band1(); 

是一个函数声明的解释,在C ++ 11中有两个可能的修正:

 ZombieFetus band1{} ; 

或预C ++ 11

 ZombieFetus band1; 

clang在这里更有帮助 ,并警告说:

 warning: empty parentheses interpreted as a function declaration [-Wvexing-parse] ZombieFetus band1(); ^ 

默认的构造函数不带参数,所以删除()就像

 ZombieFetus band1; 

你得到了

 make -kx; ./x g++ x.cc -ox some random bands : http://www.metal-archives.com/band/view/id/55878 http://www.metal-archives.com/band/view/id/74239 

但是这是一个返回ZombieFetus的函数band1的“forward”声明

 ZombieFetus band1(); 

更改:

ZombieFetus band1();

ZombieFetus band1;

当实例化一个没有参数的对象时,你不应该使用括号。

ZombieFetus band1(); 声明一个名为band1的函数,该函数不带参数并返回ZombieFetus类型的值。 如果你想使用默认的构造函数“ZombieFetus band1” 会没事的。 希望这会有所帮助。