没有输入的默认构造函数

时间:2014-07-16 23:10:02

标签: c++ class constructor

我正在尝试创建一个具有没有输入参数的构造函数的类 - 我试图通过打印到屏幕来测试它。但是,除非我给构造函数一个输入,否则构造函数会被直接跳过 - 调试模式甚至不会将它注册为一行 - 任何人都可以对此有所了解吗?

此外,是否可以从属于不同类的构造函数/函数内部调用另一个类的构造函数?

标题文件:

#pragma once
#include <vector>

using namespace std;

class rain
{
public:
    rain(); 
    void update();
    ~rain();

private:

};

源文件:

#include "stdafx.h"
#include "rain.h"
#include "Digital Rain.h"
#include "Stream.h"
#include <Windows.h>
#include <iostream>
#include "Stream.h"



using namespace std;

int screen_width = 79;

rain::rain()
{
    cout << "hi" << endl;
}


void rain::update()
{
    Sleep(5);
}



rain::~rain()
{
}

1 个答案:

答案 0 :(得分:5)

让我们看一段代码:

#include <iostream>

class rain {
    public:
        rain();
};

rain::rain() {
    std::cout << "hi\n";
}

int main() {
    rain x();
    rain y;
}

当我们运行它时,我们只会在输出上看到hi一次。这是因为Most Vexing Parse

所以:

  • x实际上是一个函数声明,用于不带参数并返回rain对象的函数。
  • y实际上是rain个对象。

此外,您的编译器可能会警告您这种情况。例如clang将报告:

asdd.cc:26:11: warning: empty parentheses interpreted as a function declaration [-Wvexing-parse]
    rain x();
          ^~
asdd.cc:26:11: note: remove parentheses to declare a variable
    rain x();
          ^~
1 warning generated.