c++ - 没有输入的默认构造函数

标签 c++ class constructor

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

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

头文件:

#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()
{
}

最佳答案

我们来看一段代码:

#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.

关于c++ - 没有输入的默认构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24792356/

相关文章:

c++ - 在 C++ 中,VOID 和 void 有区别吗?

c++ - Win32 控制台应用程序无法在 VS2012 Pro 中运行

c++ - 我有一个关于 std::vector<shared_ptr> 的问题

scala - 是否可以在 Scala 中定义构造函数局部变量?

c++ - 将 QAbstractTableModel 与 QML TableView 连接起来

C++ header 保护对象和用法?

c++ - 我如何确定模板参数参数是否是模板内结构中另一个类的实例? C++

java - 在 Class.forName(...) 加载的 jar 上使用 getResourceAsStream

java - Clojure Java 互操作错误 : Illegal Argument Exception: NO MATCHING CONSTRUCTOR FOUND

c++ - 在另一个类的构造函数中创建 n 个对象的最佳方法?