0

カスタム オペレータを作成していますが、それらにパラメータを渡すときに問題が発生しています。

例えば

class test{
     public:
        test operator[](vector <string> s){
            test a;
            return a;
         }
}; 

メインプログラムでこのようなことをしたい場合

 int main(){

    test d;
    vector<string> s;
    s.push_back("bla");
    d[s];
 }

たくさんのエラーが発生します。どこかに const が必要なのか、わからないからですか。

また、クラス テスト ( << operator ) を出力するためのカスタム オペレーターを組み込みました。これで、メイン プログラムで d[s] を呼び出してもコンパイル エラーは発生しませんが、メイン プログラムで cout<< d[s] を呼び出すとコンパイル エラーが発生します。単純な cout<< d でテストしたため、演算子 << は機能しています

4

3 に答える 3

1
return test;

testタイプです。型を返すことはできません。おそらくあなたは次のことを意味しました:

return a;

しかし、ローカル変数への参照を返すため、別の問題が発生します。関数が返されるとオブジェクトaは破棄されるため (それがスコープであるため)、参照はぶら下がったままになります。

于 2013-05-22T10:30:14.553 に答える
0
Code working fine using gcc compiler.

#include <string>
#include <vector>
using namespace std;

class test{
     public:
        test operator[](vector <string> s){
            test a;
            return a;
         }
};

int main(){

    test d;
    vector<string> s;
    s.push_back("bla");
    d[s];
 }
于 2013-05-22T10:40:59.500 に答える
0

他の人々がすでに指摘しているエラー (ぶら下がっている参照、値ではなく型を返す) にもかかわらず、[] をオーバーライドする場合は、ポインタ依存演算子 (単項 *) をオーバーライドすることも検討する必要があることに注意してください。それらを交互に使用します。

于 2013-05-22T10:34:19.787 に答える