我有这段代码:
#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上回答,请给我链接...我找不到答案......
(你有点太多了,不能一个接一个)
答案 0 :(得分:7)
问题在于:
ZombieFetus band1();
是一个解释为函数声明,在 C ++ 11 中有两个可能的修复:
ZombieFetus band1{} ;
或预先 C ++ 11 :
ZombieFetus band1;
clang
在这里稍微helpful并发出警告:
warning: empty parentheses interpreted as a function declaration [-Wvexing-parse]
ZombieFetus band1();
^
答案 1 :(得分:3)
默认构造函数不接受参数,因此删除() 像
ZombieFetus band1;
你得到了
make -k x; ./x
g++ x.cc -o x
some random bands :
http://www.metal-archives.com/band/view/id/55878
http://www.metal-archives.com/band/view/id/74239
但这是一个函数band1的“前向”声明,返回ZombieFetus
ZombieFetus band1();
答案 2 :(得分:2)
变化:
ZombieFetus band1();
到
ZombieFetus band1;
在实例化没有参数的对象时,不应使用括号。
答案 3 :(得分:2)
ZombieFetus band1();
声明一个名为band1的函数,该函数不带参数并返回类型ZombieFetus
的值。
如果你想使用默认构造函数'ZombieFetus band1;'会没事的。
希望这会有所帮助。