2010-05-05 75 views
0
void CVisualStudioDemoDoc::updateLine(void) 
{ 
int newln = GetLineNumber(p_buf); 
reinterpret_cast<CVisualStudioDemoView *>(m_viewList.GetHead())->SetCurrentLineNumber(ln, newln); 
ln = newln; 
} 

我想打電話從我的代碼另一部分該功能,而無需給予對象的指針,包括報頭的功能。調用使用對象成員不給對象

我想叫它就像一個正常的void函數。

if (changementLigne == true) { 
     currentLine = prog; 
     // TODO : appeler le callback de X2 
     updateLine(); 
     Suspendre(); 
     changementLigne = false; 
    } 

我不知道這是否是可能的,因爲CVisualStudioDemoDoc類是一個MFC類,我沒有找到一個指針,我可以使用。

+0

我知道,但我需要一種方法來做到這一點,因爲我從C代碼調用這個函數 – toto 2010-05-05 17:44:38

+0

你會期望這樣的呼叫做什麼?這個函數是一個成員函數的全部原因是因爲它對某個實例執行某個操作。 – 2010-05-05 17:45:27

回答

3

你不能這樣做。

如果成員函數引用成員變量,則需要有效的指針this。如果你沒有包含聲明該函數的頭文件,編譯器無法知道你指的是什麼。它怎麼知道updateLine()是一個函數,除非你告訴它?

如果您試圖從C代碼調用C++成員函數,那麼您需要編寫一個包裝器。像下面這樣(未測試):

.h文件中:

extern "C" { 
CallUpdateLine(void* data); 
} 

.cpp文件:

extern "C" { 
    CallUpdateLine(void* data) 
    { 
    CVisualStudioDemoDoc* ptr = static_cast<CVisualStudioDemoDoc*>(data); 
    ptr->updateLine(); 
    } 
} 

還有其他questions,可能是有幫助。

+0

看起來我們認爲同樣的東西,我也使用包裝函數工作。問題解決了IMO。 – toto 2010-05-05 17:54:19