这是C ++ Win32程序。 我已经制作了一个方法,但这不是编译的。
我希望问题的原因是使用CStringArray作为方法的参数。
Ipc3dxContainerPtr KmCdmMakeMultiProjectAction::FindLastFolder
(Ipc3dxContainerListPtr folderList, CStringArray folderNameArr)
{
Ipc3dxContainerPtr folder = NULL;
// skip other process
return folder;
}
这就是这个。
Ipc3dxContainerPtr folder = FindLastFolder(folderList, s_ForlderName);
我能得到一些建议吗? 谢谢。
答案 0 :(得分:1)
好吧,您将folderList
声明为object
并尝试在此处使用,
Ipc3dxContainerPtr folder = NULL; <-- Error Here
而不是pointer to object
。如果您的class
未设置为处理该情况,则compilation
error
可能来自class
内的处理。
同样适用于
的原因Ipc3dxContainerPtr folder = FindLastFolder(folderList, s_ForlderName);
无效。所以,基本上只需将folderList
更改为*folderList
。
答案 1 :(得分:1)
在
Ipc3dxContainerPtr KmCdmMakeMultiProjectAction::FindLastFolder
(Ipc3dxContainerListPtr folderList, CStringArray folderNameArr)
CStringArray folderNameArr
按值传递。这将触发CStringArray
的复制构造函数,该构造函数将尝试复制它的基类CObject
,并且CObject
无法复制,因为其复制构造函数为private
专门用于防止复制。在C ++ 11及更新版本中,复制构造函数为delete
d,很可能会让您更容易理解错误消息。
解决方案:通过引用传递:CStringArray & folderNameArr
如果您不希望在函数内部更改folderNameArr
,请使用const CStringArray & folderNameArr
。如果您要更改参数的副本,而不是原始参数的副本,请为其创建新的CStringArray
和CStringArray::Append
folderNameArr
。
答案 2 :(得分: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 ++的基本理论。 无论如何我解决了这个问题。
需要引用的人有同样的问题,谢谢。