2017-02-28 2 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

値によって渡されます。コピーコンストラクタがトリガされます。コピーコンストラクタがコピーを防ぐためにprivateであるため、CObjectCObjectはコピーできません。 C++ 11以降では、コピーコンストラクタはdelete dとなり、エラーメッセージを理解しやすくなりました。

ソリューション:参考資料:CStringArray & folderNameArrfolderNameArrを機能内で変更しない場合は、const CStringArray & folderNameArrを使用してください。パラメーターのコピーを変更したいがオリジナルは変更しない場合は、新しいCStringArrayCStringArray::AppendfolderNameArrを作成してください。

+0

あなたの説明をありがとう! – user5949771

0

さて、あなたはobjectとしてfolderListを宣言し、pointer to objectなど

Ipc3dxContainerPtr folder = NULL; <-- Error Here 

はなく、ここでそれを使用しようとします。 classがその状況を処理するように設定されていない場合、compilationerrorはおそらくclass内で処理されている可能性があります。

同じことが

Ipc3dxContainerPtr folder = FindLastFolder(folderList, s_ForlderName); 

が機能しない理由にも適用されます。だから、基本的にfolderList*folderListに変更してください。

+0

Nick Pavini。あなたのご意見ありがとうございます。エラーの原因はCStringArrayでした。そして私はこれを解決しました。私の元のソースは "Ipc3dxContainerPtr folder"と他のプロセスにオブジェクトを挿入するものを書いています。しかし、私は私の質問を書いていませんでした。ありがとうございました! – 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++の基本理論について理解していないので。 とにかく私はこの問題を解決しました。

人々が参照する必要がある問題は同じですが、ありがとうございます。

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

CStringArray folderNameArr

関連する問題