2017-02-28 54 views
2

這是C++ Win32程序。 我已經做了一個方法,但這不是編譯。爲什麼不能編譯如果我使用CStringArray作爲方法的參數

我期望的問題的原因是使用的CStringArray作爲方法的參數。

Ipc3dxContainerPtr KmCdmMakeMultiProjectAction::FindLastFolder 
(Ipc3dxContainerListPtr folderList, CStringArray folderNameArr) 
{ 
    Ipc3dxContainerPtr folder = NULL; 
    // skip other process 
    return folder; 
} 

而這個由此調用。

Ipc3dxContainerPtr folder = FindLastFolder(folderList, s_ForlderName); 

我可以得到一些建議嗎? 謝謝。

+1

而編譯錯誤是? –

+0

Richard Critten //抱歉!錯誤是這個「錯誤C2248:'CObject :: CObject'」:不能訪問私人會員 – user5949771

回答

1

Ipc3dxContainerPtr KmCdmMakeMultiProjectAction::FindLastFolder 
(Ipc3dxContainerListPtr folderList, CStringArray folderNameArr) 

CStringArray folderNameArr由值來傳遞。這將觸發的CStringArray拷貝構造函數將試圖複製它的基類,CObjectCObject無法複製,因爲它的拷貝構造函數是private專門防止複製。在C++ 11和更新版本中,複製構造函數將爲delete d,這很可能使您更容易理解錯誤消息。

解決方案:通過引用傳遞:CStringArray & folderNameArr如果你不想folderNameArr在函數內部改變,使用const CStringArray & folderNameArr。如果你想改變參數的副本,而不是原來的,使一個新的CStringArrayCStringArray::AppendfolderNameArr它。

+0

謝謝你的解釋! – user5949771

0

嗯,你聲明folderListobject,並試圖在這裏使用它,

Ipc3dxContainerPtr folder = NULL; <-- Error Here 

,而不是作爲pointer to object。如果未設置你的class以處理那種情況下,該compilationerror很可能從class內處理到來。

這同樣適用於爲什麼

Ipc3dxContainerPtr folder = FindLastFolder(folderList, s_ForlderName); 

不工作。所以,基本上只是將folderList更改爲*folderList

+0

尼克帕維尼。感謝您的評論和對不起,我對問題的解釋不夠。錯誤的原因是CStringArray。我解決了這個問題。我的原始源代碼是在「Ipc3dxContainerPtr文件夾」和其他進程中寫入了什麼插入對象。但是,我沒有寫下我的問題。謝謝! – user5949771

+0

@ user5949771哈哈很酷 –

0

首先比較遺憾的是解釋是不夠的。 並解決了這個問題。

void KmCdmMakeMultiProjectAction::MethodA() 
{ 
    CStringArray s_ForlderName; 
    s_ForlderName.Add("Hi"); 

    Ipc3dxContainerListPtr folderList = cabinet->GetContainerList(); 

    Ipc3dxContainerPtr folder = FindLastFolder(folderList, s_ForlderName); 
} 

Ipc3dxContainerPtr KmCdmMakeMultiProjectAction::FindLastFolder 
(Ipc3dxContainerListPtr folderList, CStringArray folderNameArr) 
{ 
    Ipc3dxContainerPtr folder = NULL; 
    // skip other process 
    folder = (Ipc3dxContainerPtr)folderList->GetItem(0) 
    return folder; 
} 

失敗的來源。我可以通過編輯來解決這個問題。

Ipc3dxContainerPtr KmCdmMakeMultiProjectAction::FindLastFolder 
(Ipc3dxContainerListPtr folderList, CStringArray& folderNameArr) 
{ 
    \\CStringArray folderNameArr -> CStringArray& folderNameArr 
} 

我還是不知道爲什麼會發生這個問題。因爲我不瞭解C++的基本理論。 反正我解決了這個問題。爲人們所引用的

需要有同樣的問題,謝謝。

相關問題