2014-02-21 79 views
3

我想知道是否有一個函數之前聲明一個類的方式,並對其進行初始化函數裏面,像這樣:有沒有辦法來聲明一個類,然後在C++中的函數中初始化它?

Application.h:

class Application 
{ 
    Application(HWND hwnd); 
    ~Application() {} 
}; 

主。 CPP:

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

Application App; 

int main() 
{ 
    App(hwnd); 
    return 0; 
} 
+2

什麼是你要解決真正的問題?該對象在構造期間被初始化,該構造函數被調用之前該對象是什麼? –

+0

你沒有聲明一個類,你聲明一個*實例*,是的,動態分配就是這樣一種方式。現在,*爲什麼*你問? – WhozCraig

+0

我將'App'聲明爲一個指針,並在您的函數中動態分配它。 AFAIK無法做到這一點靜態。 – ApproachingDarknessFish

回答

0

不能初始化函數中的全局對象,該對象的構造函數將被調用一段時間程序的主要功能是調用之前。這是非常糟糕的,它涉及靜態初始化失敗的事情,你想避免它。嘗試在C++中搜索單例模式實現,這可能是您需要的。

1
Application *pApp; 

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

    //use pApp 

    delete pApp; 
    return 0; 
} 

使用指針幾乎是唯一的方法來做你想做的事情。

0

在C++中,對象的構造函數在爲其分配存儲空間時被調用,您不能像以後那樣調用構造函數。

您可能會考慮未定義構造函數,並使用單獨的成員函數(例如init)來初始化您的App對象。

Application.h:

class Application 
{ 
public: 
    void init(HWND hwnd); 
}; 

Main.cpp的:

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

Application App; 

int main() 
{ 
    App.init(hwnd); 
    return 0; 
} 
相關問題