0

以下の例のように、加算などの一連の構造体に対して操作を実行したいと考えています。プログラムでエラーが発生しますno match for 'operator+' (operand types are 'Gravity' and 'Friction')。どうすれば正しく実装できますか?

#ifndef FORCE_HPP
#define FORCE_HPP

struct Physics{    // not sure if this is needed

  struct Gravity{   // force type 1, which computes gravity

    int operator()(double t) {   //gravity force is computed based on a parameter t, and returns an int
        ...
        return Fg;
    }
};

  struct Friction{    // force type 2, which computes friction

    int operator()(double t) {   //friction force is computed based on parameter t, and returns an int
        ...
        return Fs;
    }
};

  template< typename F1, typename F2>
  Point make_physics(F1 first, F2 second){   // there can be 2 gravity forces, 2 friction forces, or 1 gravity and 1 friction force in a problem. As a result, use a template
    return first + second;
  }

};
#endif

プログラムが正しく動作する場合、次の操作を行うと

int main(){
...
make_pair(t, make_physics(Gravity(), Friction()) );
...
}

時間とその時間に対して計算された力のペアを取得する必要があります。

4

1 に答える 1

3

そこには OOP はありませんし、プログラムが何をするべきかについて言及したこともありません。しかし、最も明白な方向に実行し、迅速な修正を適用すると、

#ifndef FORCE_HPP
#define FORCE_HPP

namespace Physics{ // use a namespace, not an unusable struct

  struct Force { // OOP base class for various forces
    double value; // one dimension for now

    operator double () { // implicitly convert to a scalar equal to magnitude
      return value;
    }
  };

  struct Gravity : public Force {
  };

  struct Friction : public Force {
  };

  template< typename F1, typename F2>
  double add_scalars(F1 first, F2 second){ 
    return first + second; // sort of pointless, but there you have it
  }

}
#endif
于 2013-03-24T02:51:56.397 に答える