-2

私はC++の第一人者ではありません。さまざまな小さな試行で、このエラーを再現しようとしました。事実、私がやりたいことで2 o 3クラスの小さなプログラムを実行しても、エラーは発生しません。しかし、メインのアプリケーションでは、多くの(ナンセンスな)解決策を試したとしても、エラーが続くように書き込もうとしています。

問題は、いくつかのリソースを(ポインターとして)インスタンス化するメインクラスと、コンストラクターがリソースを取り込むさまざまな具体的な動作をインスタンス化する戦略パターンがあることです。

メインアプリでは、init():

device = new Kinect();
controls = new Gui();

UserPositionBehaviour = new UserPositionBehaviour(device, controls);

そして、振る舞いコンストラクター:

UserPositionBehaviour(Kinect * device, Gui * controls);

これはエラーです:

src/App.cpp:30: error: no matching function for call to ‘UserPositionBehaviour::UserPositionBehaviour(Kinect*&, ofTrueTypeFont*&, ofxGui*&)’
src/UserPositionBehaviour.h:15: note: candidates are: UserPositionBehaviour::UserPositionBehaviour(Kinect*, ofxGui*, ofTrueTypeFont*)
src/UserPositionBehaviour.h:13: note:                 UserPositionBehaviour::UserPositionBehaviour(const UserPositionBehaviour&)

え?ヘイ、何が起こっているの?*&ではなくポインタを渡しています(イベントの読み方がわかりません)

いくつかのアドバイス?

私はcoutsのみに基づいた単純なケースでエラーを再現しようとしましたが、問題はないので、どこかに隠されたエラーがあるかもしれません。

4

3 に答える 3

3

エラーの原因となるコードは3つの引数(あなたが思うように2つではありません)を渡し、最後の2つは間違った順序になっています。ソースファイルの間違ったバージョン、またはそのようなものを見ている必要があります。

コンパイラが実際にコンパイルしているバージョンを見る代わりに、古くなったコピーsrc/UserPositionBehaviour.hやうそをついているようなばかげたものをチェックしてください。src/App.cppまたは、コンパイル済みヘッダーを使用していて、そこで問題が発生した可能性があります。

見つからない関数のエラーメッセージは通常、次のようになります。これFoo *&は「Fooへのポインタへの参照」タイプであり、引数式がFooへの左辺値であることを意味します。その呼び出しは、値によってポインターを受け取る関数、または参照によってポインターを受け取る関数と一致する可能性がありますコンパイラはどちらも検出しませんでしたが、エラーメッセージに対して何かを選択する必要があり、コンパイラはそれを選択します。呼び出しに。のdevice+0代わりに引数式が含まれている場合device、非const参照を渡すことはできず(の結果device+0は一時的なものであるため)、エラーメッセージには。が含まれません&

于 2012-05-24T14:01:09.867 に答える
3

エラーメッセージによると、2つではなく3つの引数を使用してコンストラクターを呼び出しており、最後の2つが間違った方法で呼び出されています。

それが実際のエラーメッセージである場合、コードはおそらく次のようになります。

UserPositionBehaviour = new UserPositionBehaviour(device, font, controls);
//                                                        ^^^^  ^^^^^^^^

そして、次のようになります。

UserPositionBehaviour = new UserPositionBehaviour(device, controls, font);
//                                                        ^^^^^^^^  ^^^^

コードが実際に投稿したものと同じように見え、そのエラーメッセージが表示される場合は、本当に奇妙なことが起こっています。その場合は、さらに調査できるように、完全なコンパイル可能な例を投稿してください。

gccのエラーメッセージの余分なsは無視してかまいません&。これは、値または参照のいずれかによって引数を取る関数を探しているという、少し奇妙な言い方です。

于 2012-05-24T14:01:55.343 に答える
1

本当にコンストラクターがある場合は、コードをコンパイルする必要があります

UserPositionBehaviour(Kinect * device, Gui * controls);

定義済み。コンパイラによると、次のことは行いません。

src / UserPositionBehaviour.h:15:注:候補は次のとおりです:UserPositionBehaviour :: UserPositionBehaviour(Kinect *、ofxGui *、ofTrueTypeFont *)src / UserPositionBehaviour.h:13:注:
UserPositionBehaviour :: UserPositionBehaviour(const

単純に、参照によってポインターを渡すことを意味します。*&つまり、コンストラクター内でポインターを変更できます。

于 2012-05-24T13:53:38.327 に答える