問題タブ [friend-function]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
0 に答える
79 参照

c++ - プライベート変数にアクセスするフレンド関数

フレンド関数をテストする小さなコードを書きました。特定のクラスに属していないメソッドでは問題なく機能しましたが、クラスに入れようとすると、アクセスできるのはパブリック変数だけです(オブジェクトと同じように)。

s.ip は、メンバーにアクセスできないというエラーを表示します。

0 投票する
1 に答える
1308 参照

c++ - クラスに実装された C++ フレンド関数はプライベートにアクセスできません

2 つのクラスを定義し、そのうちの 1 つでフレンド関数を宣言し、もう 1 つで実装しようとしています。私は実際に、この投稿で見つかったものを正確に取得しようとしています:

特定の1つの関数とクラスに対してのみフレンド関数を宣言するにはどうすればよいですか?

回答を読んで、なるほどと思いました。それを私のコードに実装すると、エラーが発生しました:

編集:

エラー1 error LNK2019: unresolved external symbol _main referenced in function ___tmainCRTStartup ...\MSVCRTD.lib(crtexe.obj) - (main関数追加で解決)

エラー2 error LNK1120: 1 unresolved externals ...\Debug\Project.exe 1 1.. - (main関数追加で解決)

エラー 3 IntelliSense: メンバー "one::data1" (19 行目で宣言) にアクセスできません ...\Friends.cpp - (プロジェクトをクリーニングして再構築した後でも存在します)

実装方法に問題があるのではないかと思ったので、回答のコードをコピーして貼り付けました。

しかし、同じ場所で同じエラーが発生しました: a.data1アクセスできませんでした

次に、問題を解決するための同じ手法を提案する例をさらに検索して見つけましたが、それらはすべて、同じ場所で同じアクセスできないエラーを与えてくれました...

足りないものはありますか?提供された例 (以前の投稿からの提案された解決策) は機能するはずですか? 仕様が変わったのかな。

助けてくれてありがとう。D

PS これについて新しい質問を開かないように、以前の投稿にコメントしようとしましたが、評判が低いためコメントできませんでした (私はここで初めてです)。

0 投票する
1 に答える
521 参照

c++ - C++ のフレンド メンバー関数 - 前方宣言が機能しない

別のクラスのフレンドとしてクラス メンバー関数を指定しますか? で説明されている状況と同様の状況があります。.

ただし、私の場合、クラス B はクラス A を使用しているため、クラス A を知る必要があるため、そのスレッドで指定された解決策は機能しません。関数自体にも前方宣言をしようとしましたが、うまくいきませんでした。各クラスには他のクラスの完全な定義が必要なようです...

それを解決する簡単な方法はありますか?私は、古いクラスの 1 つをラップする新しいクラスを含まないソリューションを好みます。

コード例:

ヘルパーに感謝します!

(ちなみに、これは私の最初の質問です。私は自分自身を明確に説明したいと思います)

0 投票する
1 に答える
636 参照

c++ - C++ のコールバック関数を使用したフレーム グラブ。クラスとどのように通信しますか?

最近、SDK にバンドルされている GigE カメラを購入しました。例の 1 つは、コールバック関数を介してカメラからフレームを取得する方法を説明しています。次のように動作します。

上記は単純な cpp プログラムに基づいています (オブジェクトは含まれません)。

現在、オブジェクト指向アプリケーション ( openFrameworks で作成) に機能を組み込もうとしています。私はそれを行う方法について本当に曖昧であり、インターネットでフォローするのに十分な例を見つけることができませんでした.

基本的にheaderファイルで行うこと:

次に、私のimplementation(.cpp)ファイルで

これをフレンド クラスとして使用することは問題ありませんが、ofAppクラスのインスタンス化 (つまり、bNewFrame 変数) にアクセスするにはどうすればよいでしょうか? また、メンバー関数pImageから後でアクセスするにはどうすればよいですか?update()

ご協力ありがとうございました!

0 投票する
1 に答える
408 参照

c++ - gccのバグ?テンプレートクラスのフレンド機能に関するアクセス制御の問題

テンプレート クラスがあり、クラス内でフレンド関数を定義します。

私の理解が正しければ、(4) functionvoid foo(template_class<int>)を生成し、それを のフレンドにすると、上記のソースの (1) や (2)template_class<int>のようなプライベート メンバーにアクセスできるようになります。template_class<int>しかし、(3)もOKではありません。 の友達ではなく、 の友達になるtemplate_class<char>だけです。void foo(template_class<char>)template_class<char>

編集 @Constructor と @Chnossos が言ったように、上記のソースはgcc 4.8.1で問題なくコンパイルされましたが、 clang 3.4で失敗しました。それで、どれが正しいですか?それはgccの単なるバグですか?標準には、このケースについて明示的な定義がありますか?

0 投票する
1 に答える
3700 参照

c++ - C ++で、別のクラスの静的関数をフレンドにする方法

A と B の 2 つのクラスが必要です。クラス B には静的関数があり、A はこの関数と友達になりたいと考えています。

私のコードは以下の通りです

クラスA

クラスB

しかし、コンパイラは私に言います:

メンバー関数 'static void B::staticFunction()' を静的リンケージ [-fpermissive] を持つように宣言することはできません

クラス外の 'static void B::staticFunction()' の宣言は定義ではありません [-fpermissive]

これらのエラーを修正するにはどうすればよいですか? 助けてくれてありがとう

編集

みんなありがとう、私はついに理解しました

作業コードは