私は、テンプレートを使用して時系列プロファイルクラスを作成しています。構造体tmで表される数値インデックスまたは日付と時刻のいずれかでプロファイルをインデックスします。数値インデックスによるインデックス作成は正常に動作しますが、日付によるインデックス付けはオブジェクトへのポインタでは機能しません。ここでは動作するアプローチと動作しないアプローチを含むサンプルコードを示します。グローバルな演算子は「TM」と入力とる見つからない(または全く許容される変換はありません):C++オブジェクトへのポインタがあれば、operator []関数を呼び出す正しい方法は何ですか?
#include "profile.h" // Class Profile<T> is declared and defined here.
float f;
int i;
struct tm d;
Profile<float> p;
Profile<float> *pPtr;
// Non-pointer syntax
f = p[i]; // this works.
f = p.operator[](i); // this works, but its ugly.
f = p[d]; // this works.
f = p.operator[](d); // this works, but its ugly.
// Pointer syntax
f = (*pPtr)[i]; // this works.
f = pPtr->operator[](i); // this works, but its ugly.
f = (*pPtr)[d]; // this isn't what I typed. I did f = *(pPtr)[d];
f = pPtr->operator[](d); // this works, but its ugly.
このC++コードは、「[」コンパイラエラーメッセージは、バイナリエラーC2677でのVisual Studio 2008に書き込まれています。
C++オブジェクトへのポインタがあれば、operator []関数を呼び出す正しい方法は何ですか?
'f =(* pPtr)[d]; //これはうまくいかない。 '私はそれが働くことを保証するだろう。あなたはどんなエラーを見ていますか? – ildjarn
'(* pPtr)[d]'はどういう意味ですか? '* pPtr'は' Profile& 'を生成するので、これは' p [d] 'に対して受け入れられる加入者演算子を受け入れるべきです。 –
それは本当に変です! 4時間苦労して一貫したコンパイラエラーが発生したので、今すぐ動作します。 8^P –