0

true または false ではなく、1 と 0 を返すコードを作成しようとしています。しかし、これは正しくないようです。

int Short_Vector::operator==(const Short_Vector& obj){
    if(a == obj.a && b == obj.b && c == obj.c && d == obj.d){
        return 1;
    }else{
        return 0;
    }
 }

したがって、各変数の値を返す必要があります。

私もこれを試しました:

int Short_Vector::operator==(const Short_Vector& obj){
    int a_tf, b_tf, c_tf, d_tf;
    if(a == obj.a){
        a_tf = 1;
    }else{
        a_tf = 0;
    }
    if(b == obj.b){
        b_tf = 1;
    }else{
        b_tf = 0;
    }
    if(c == obj.c){
        c_tf = 1;
    }else{
       c_tf = 0;
    }
    if(d == obj.d){
       d_tf = 1;
    }else{
        d_tf = 0;
    }
    return(a_tf, b_tf, c_tf, d_tf)
}

しかし、コンマが演算子であるというエラーが発生しました。

編集

エラーの取得: エラー: 'int' から非スカラー型 'Short_Vector.

この [9,1,5,5] のようなベクトルを表現しようとしています。

それから私は言います

`Short_Vector a(2, 6, 9, 4);

Short_Vector b(3, 8, 7, 6);

Short_Vector c = a == b;

cout<<c;`

出力は次のとおりです。[0,0,0,0]

4

5 に答える 5

2

結果を として取得したい場合はShort_Vector、これを試してください:

Short_Vector Short_Vector::operator==(const Short_Vector& obj) {
    return Short_Vector(
        a == obj.a,
        b == obj.b,
        c == obj.c,
        d == obj.d
    );
}
于 2013-05-09T19:36:40.460 に答える
1

戻り値の型として int を使用する必要がある場合は、左シフト演算子を使用して次のようにすることができます。

int result = 0;
result += a_tf << 3; //Shifts the bit 3 places to the left.
result += b_tf << 2; //Shifts the bit 2 places to the left.
result += c_tf << 1; //Shifts the bit 1 place to the left.
result += d_tf; //Puts d_tf as bit 0
return result;

そして、それぞれを元に戻すには、ビット単位の and を使用します。

result = obj1 == obj2; //Where obj1 and 2 are your compared objects
int a_tf = (result >> 3) & 1;
int b_tf = (result >> 2) & 1;
int c_tf = (result >> 1) & 1;
int d_tf = result & 1;

ビットセットを使用したNamedのソリューションはより理解しやすく、単一の値の挿入/取得ははるかに簡単であると言わざるを得ません。

于 2013-05-09T19:35:35.340 に答える