【问题标题】:C++ Error C2512: no appropriate default constructor availableC++ 错误 C2512:没有合适的默认构造函数可用
【发布时间】:2014-05-26 13:25:32
【问题描述】:

我有一个名为MainWindow 的类,没有默认构造函数。我有一个名为Application 的类,它的构造函数使用MainWindow 的实例作为参数。我得到一个

 Error C2512, "no appropriate default constructor available" 

在Application类的构造函数的定义中。

这是构造函数的代码:

Application::Application(HINSTANCE hInstance, MainWindow mainWindow) {...}

我正在像这样创建Application 的实例:

MainWindow window(1000, 1000, false, "test");
Application program(Instance, window);

为什么会出现此错误?我没有尝试使用默认构造函数创建 MainWindow 的新实例。

【问题讨论】:

  • ApplicationMainWindow 数据成员吗?如果是这样,那么您将默认构建它。
  • 如何创建 Application 对象?贴出代码

标签: c++ visual-c++ constructor syntax-error instance


【解决方案1】:

似乎类 Application 有一个 MainWindow 类型的数据成员,无法创建。否则不清楚为什么类Application的构造函数有参数MainWindow mainWindow。我认为它用于将其分配给类的数据成员。

您可以使用 ctor-initializer。例如,如果类 Application 确实有一个 MainWindow 类型的数据成员(将其命名为 m_window),那么您可以按以下方式编写构造函数

Application::Application(HINSTANCE hInstance, MainWindow mainWindow) : m_window( mainWindow )
{
   //...
}

【讨论】:

    【解决方案2】:

    如果问题不是 MainWindow 类成员,那么您的 Application 类有一个构造函数,该构造函数按值获取 MainWindow 参数。为了做到这一点,它必须创建一个窗口的副本,如果你没有复制构造函数,编译器可能正在寻找一些方法来创建这个副本。试试:

    Application::Application(HINSTANCE hInstance, MainWindow &mainWindow) {...}

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-28
      • 2013-08-25
      • 2012-10-10
      • 2014-12-31
      • 2012-12-16
      • 2014-01-31
      • 1970-01-01
      相关资源
      最近更新 更多