-3

わかりましたので、私の問題はこれです。カスタムメイドのリストをコピーする必要があり、関数はリスト クラスのプライベート メンバーである必要があります。このatmのように見えます:

private:
struct List_Node* head_;
List* copy(List* list);

私が知っているがらくたのように見えますが、私はそのようにするように言われました. コンパイルエラーを取得:

error: `List* List::copy(List*)' is private

この問題を回避する方法はありますか、それとも自分の方向を間違って理解していますか?

4

4 に答える 4

2

である別のメンバー関数内から関数を呼び出す必要がありますpublic

privateクラス外からメンバー関数を呼び出すことはできません。エラーは、あなたがそれをしていることを示唆しています。

于 2012-04-10T10:37:16.470 に答える
1

List::copy(タイトルが示すように) のメンバー関数内で fromを呼び出している場合List、問題はないはずです。

クラス外から呼び出したい場合は、クラスのcopy呼び出し元関数 a を宣言しない限り、private メンバー関数 ( など)にアクセスできません。friend

于 2012-04-10T10:38:24.090 に答える
0

このクラスのユーザーはリストを直接コピーすることは想定されていないため、そうするように言われていると思います。リスト ノードは、外部関数からアクセスできないプライベート構造体としても宣言されています。リスト ノードの構築と破棄は、このクラスのメンバー メソッドによって処理される必要があります。

これらの理由により、コピー メソッドを保護する必要があり、この場合は非公開として宣言する必要があります。

プライベート コピー メソッドは、パブリック メソッドを含む、このクラスの任意のメンバー メソッドで呼び出すことができます。

発生する可能性は低いですが、このプライベート メソッドを呼び出すだけのパブリック メンバー メソッドを宣言するだけで、プライベート メソッドを外部関数に公開できます。しかし、そもそも copy メソッドを private と宣言しても意味がありません。

于 2012-04-10T11:19:55.513 に答える
0

コピー コンストラクターまたは演算子の=オーバーロードを使用してみてください。

于 2012-04-10T10:49:01.277 に答える