我無法初始化託管類中的靜態本地指針。如何在C++/CLI代碼中初始化非託管靜態指針?
下面是詳細信息:我創建了一個C++/CLI控制檯項目,並在其中聲明瞭一個靜態非託管指針。不過,我無法用任何方法初始化靜態指針(但是如果我將指針放入匿名名稱空間中,沒有問題,請在代碼中演示)。你有沒有遇到過類似的情況併爲它提供解決方案?
代碼在這裏:
class MyTask
{
public:
int m_index;
MyTask()
{
m_index = 0;
}
};
namespace
{
static MyTask* s_pTask;
}
public ref class MyApplication
{
public:
static MyTask* sm_pTask;
static void InitizlizeStaticMembers(MyTask* pTask)
{
sm_pTask = pTask;
}
void AddTask()
{
sm_pTask = new MyTask();
}
};
void main()
{
MyApplication^ app = gcnew MyApplication();
// 1st, doesn't work (sm_pTask is still null after the execution)
MyApplication::sm_pTask = new MyTask();
// 2nd, doesn't work (pTask can be initialized correctly, sm_pTask is still null after the execution)
MyTask* pTask = new MyTask();
MyApplication::InitizlizeStaticMembers(pTask);
// 3rd, doesn't work (sm_pTask is still null after the execution)
app->AddTask();
// 4th, work(s_pTask can be initialized correctly)
s_pTask = new MyTask();
}
VS2008似乎有同樣的問題,但它似乎在VS2010 Beta中得到糾正。 我確認當您打印值是否與std :: cout本地方法或System :: Console :: WriteLine()託管方法,此代碼似乎行爲正確。 – cedrou 2009-08-17 06:11:02