c++ - 我不明白的关于默认构造函数的一些事情

标签 c++ linux constructor g++ default-constructor

我有这段代码:

#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 上得到解答,请给我链接...我找不到答案...

感谢所有回答的人和所有评论者

(你有点太多了,无法一一感谢)

最佳答案

问题在于:

ZombieFetus  band1();

被解释为函数声明,您在 C++11 中有两个可能的修复:

ZombieFetus  band1{} ;

C++11 之前的版本:

ZombieFetus  band1;

clang 多了一点helpful在这里并警告:

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

关于c++ - 我不明白的关于默认构造函数的一些事情,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20233473/

相关文章:

python - 如何从 cython 公开静态 constexpr

linux - 用于重复 URL 请求的 Curl 命令

c++ - C++ 中有没有一种方法可以在没有构造函数的情况下预初始化结构或类?

javascript - 将参数传递给 Javascript IIFE 构造函数

static - C++/CLI,类声明外的静态构造函数

c++ - 跨 C 和 C++ 标准的可靠类型双关

c++ - 如何在 C++ 中将字符串转换为 const void*?

c++ - 为什么在抛出意外异常时此程序没有中止?

linux - 使用 sed 替换文本文件中的第一行

python - 无法在 Linux 上打开 Pyspark Shell