Objective C++(?!)コードで何かを修正しようとしています。これらの言語や関連するAPIやコードベースについてはわかりませんので、私は左右に邪魔されています。(Obj)C++:テンプレートからクラスをインスタンス化(参照)し、メンバにアクセスしますか?
は、私が持っていると言う:
Vector<char, sizeof 'a'>& sourceData();
sourceData->append('f');
私はそれをコンパイルしようとすると、私が手:この場合
error: request for member 'append' in 'WebCore::sourceData', which is of non-class type 'WTF::Vector<char, 1ul >&()();
を、ベクターはWTFです::ベクトル(WebKitのか、KDEか何かから) STD :: Vectorではなく、 append()は、in this documentationのように、このテンプレートから生成されたクラスのメンバであるはずです。それはベクトルです。これは、テンプレートがテンプレート化されているタイプを取ります。
私はReal Manのプログラミング言語でプログラムを書いたことがないので、参照とポインタと参照のための表記法、およびそれらが必要な箇所について混乱しています。
私が署名して別の関数に渡したいので、私は最終的には、ベクトルの参照をしたい:
void foobar(const Vector<char>& in, Vector<char>& out)
私はfoobarの中のconstを推測している()SIGは意味、私は無視することができるものです「心配しないでください。もしあなたがここを渡すなら、これは混乱しないでしょう。
私はまた、ポインタではないように扱うことができるC++参照のものではないので、 - >ではなく.appendを使ってみましたか?いずれにしても、同じエラーです。
私はsourceDataのような音を出すことはできません.WTF:Vector < char、1ul> &のようなものです。また、WTF :: Vectorのドキュメントから、Vectorを作成するときに.append()が得られることがわかります。しかし、私はテンプレートにも慣れていないので、私は本当にそれを読んでいるとは言えません。
EDIT:(これはパベルMinaevへの長いフォローがされる) WOW THANKSの問題が解決
!
私は実際にこの記事の編集を書いていましたが、Web上の参照を渡って最初の点を見つけたので、その行はコンパイラに伝えます。paramsを持たないsourceData() charのVectorを返します。この場合の「非クラス型」とは、クラスのインスタンスではない型を意味します。私はそのタイプが 'klass'ではないことを意味すると解釈しました。つまり、.addMethod(functionPointer)のように呼び出すことができると思われるタイプです。
ありがとうございます!あなたが提案したことをすることは、私が思うこの仕事をすることになります。どういうわけか、func sigがベクトル&だったので、私は&のように宣言する必要があったということを私の頭に入れました。スタック対ヒープパスの問題のように。
とにかく、それはあなたが提案したことを試したので、私の本当の問題でしたが、それは参照を初期化しません。あなたは明示的にコンストラクタを呼び出す必要がありますが、コンストラクタの引数に何かを入れて前方宣言であることを明確にすると、一時的なものに関する他のエラーで失敗しました。
この意味で、ここでは何が起こっているのかまだ分かりませんが、問題を解決するために心から感謝しています。誰かが私と将来のGoogleの人々の利益のためにいくつかの説明を追加したいなら、それは素晴らしいだろう。
1)しかし、私はスタック上にベクトルを作成するとき、どうすれば参照で渡すことができますか?同様に、実際にはどうしているのでしょうか?そこに私は、私のスタックでは、ああ、ここで関数呼び出しが来るスタックに新しいフレームをプッシュすることができます私たちのSPを保存し、私たちのlocs、OK、JMP、新しい関数...参照ポイントを保存します。どこに?囲みスタックフレームに戻る? C++での参照は古典的なようです "もっと複雑にすることでこれを簡単にすることができます!"姿勢。それから、私は実際に彼らが何であるかを知らない。 –
参照の主な目的の1つは、ポインタを使用せずに参照渡しのセマンティクスを許可することです。ポインタとは異なり、参照はその参照先のエイリアスに似ています。作成時に割り当てる必要があります。ヌルにすることはできず、別のオブジェクトへの参照として再割り当てすることもできません。私は私の答えに良い紹介へのリンクを追加しました。 –
リファレンスは確かに元のオブジェクトを指します。これは上位スタックフレームの変数です(C++のローカル変数への参照を返すのは良い考えではありません)。これはC++には新しいものではありません。C++よりずっと前にAlgolやPascalのようなものに「参照渡し」が登場して以来、このように機能しています。 –