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

时间:2017-02-28 02:35:07

标签: c++

这是C ++ Win32程序。 我已经制作了一个方法,但这不是编译的。

我希望问题的原因是使用CStringArray作为方法的参数。

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

这就是这个。

Ipc3dxContainerPtr folder = FindLastFolder(folderList, s_ForlderName);

我能得到一些建议吗? 谢谢。

3 个答案:

答案 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。如果您要更改参数的副本,而不是原始参数的副本,请为其创建新的CStringArrayCStringArray::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 ++的基本理论。 无论如何我解决了这个问题。

需要引用的人有同样的问题,谢谢。