我有这个代码:
#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答案…
(你有点太多,一个接一个)
问题是这样的:
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” 会没事的。 希望这会有所帮助。