如果我使用 CStringArray 作为方法的参数,为什么无法编译

Why cant compile if i use CStringArray as method's argument

本文关键字:参数 为什么 编译 方法 CStringArray 如果      更新时间:2023-10-16

这是C Win32程序。我已经制作了一种方法,但没有编译。

我期望问题的原因是将Cstringarray用作方法的参数。

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

,这是由此调用的。

Ipc3dxContainerPtr folder = FindLastFolder(folderList, s_ForlderName);

我可以得到一些建议吗?谢谢。

in

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

CStringArray folderNameArr按值传递。这将触发CStringArray的复制构造函数,该复制构造函数将尝试复制其基类,CObject,并且CObject无法复制,因为其复制构造函数是private专门用于防止复制的。在C 11和更新的中,复制构造函数将为delete D,很可能会给您更容易理解错误消息。

解决方案:通过参考:CStringArray & folderNameArr如果您不希望在功能内更改folderNameArr,请使用const CStringArray & folderNameArr。如果要更改参数的副本,而不是原始参数,请将新的CStringArrayCStringArray::Append folderNameArr对其进行。

好吧,您将folderList声明为object,并尝试在这里使用它,

 Ipc3dxContainerPtr folder = NULL;  <-- Error Here

而不是pointer to object。如果未设置class来处理这种情况,则compilation error可能来自class中的处理。

同样适用于为什么

Ipc3dxContainerPtr folder = FindLastFolder(folderList, s_ForlderName);

不起作用。因此,基本上只是将folderList更改为*folderList

首先对不起,解释还不够。并解决了这个。

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 的基本理论。无论如何我解决了这个问题。

需要被人们引用的问题,谢谢。