Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/158.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 有没有一种方法可以声明一个类,然后在c++;?_C++_Class_Initialization - Fatal编程技术网

C++ 有没有一种方法可以声明一个类,然后在c++;?

C++ 有没有一种方法可以声明一个类,然后在c++;?,c++,class,initialization,C++,Class,Initialization,我想知道是否有一种方法可以在函数之前声明一个类,然后在函数内部初始化它,比如: 应用程序.h: class Application { Application(HWND hwnd); ~Application() {} }; class Application { public: void init(HWND hwnd); }; Main.cpp: #include "Application.h" #include <Windows.h> Application

我想知道是否有一种方法可以在函数之前声明一个类,然后在函数内部初始化它,比如:

应用程序.h:

class Application
{
  Application(HWND hwnd);
  ~Application() {}
};
class Application
{
public:
    void init(HWND hwnd);
};
Main.cpp:

#include "Application.h"
#include <Windows.h>

Application App;

int main()
{
  App(hwnd);
  return 0;
}
#include "Application.h"
#include <Windows.h>

Application App;

int main()
{
    App.init(hwnd);
    return 0;
}
#包括“Application.h”
#包括
应用程序;
int main()
{
App(hwnd);
返回0;
}

不能在函数中初始化全局对象,在调用程序的主函数之前,将调用该对象的构造函数。这是非常糟糕的,它涉及所谓的静态初始化失败,您希望避免它。尝试在C++中搜索单模式模式,这是你需要的。p>
Application *pApp;

int main()
{
  pApp = new Application(hwnd);

  //use pApp

  delete pApp;
  return 0;
}

使用指针是实现你想做的唯一方法。C++中的

< P>在分配对象的时候调用一个对象的构造函数,你不能像你试图调用的那样调用构造函数。

您可能会考虑不定义构造函数,并使用单独的成员函数,例如“代码> init < /Cord>”来初始化应用程序对象。

应用程序.h:

class Application
{
  Application(HWND hwnd);
  ~Application() {}
};
class Application
{
public:
    void init(HWND hwnd);
};
Main.cpp:

#include "Application.h"
#include <Windows.h>

Application App;

int main()
{
  App(hwnd);
  return 0;
}
#include "Application.h"
#include <Windows.h>

Application App;

int main()
{
    App.init(hwnd);
    return 0;
}
#包括“Application.h”
#包括
应用程序;
int main()
{
App.init(hwnd);
返回0;
}

您想要解决的真正问题是什么?对象是在构造过程中初始化的,在调用构造函数之前,对象是什么?您不是在声明类,而是在声明实例,是的,动态分配就是这样一种方式。现在,你为什么要问呢?我会将
App
声明为指针,并在函数中动态分配它。好了,没有办法静态地完成这个任务。@WhozCraig我需要在函数之前声明它,因为我在两个函数中使用类函数。winMain()和MsgProc()。