C2679二項演算子 '<<' : 型 'クラス名' の右オペランドを扱う演算子が見つかりません (または変換できません)。

c2679.png

error C2679: 二項演算子 '«' : 型 'クラス名' の右オペランドを扱う演算子が見つかりません (または変換できません)。
この演算子を使うには、型を指定してこの演算子をオーバーロードするか、この演算子が定義された型への変換を定義する必要があります。

なぜエラーなのか?

result=クラス名.operator+(2);//ok
result=2.operator+(クラス名);//エラー!

これで納得?

組み込み型.operator+(自作クラス)

が定義されていないからだ!

解決策

クラスのメンバ関数としてじゃなくて、friend関数として書くべき。
関数のconstつけ忘れてるだけって場合もあるよ

vector[]のときにエラーが出る。

ちゃんと演算子が定義してあるユーザー定義型であっても、vector配列に入れてしまうと演算子がないエラーになってしまう。

mapで自作オブジェクトをキーにしようとしたときに出てくる

map参照。
入れたいオブジェクトにはこういう

 bool    operator<(const vec3<T>& _in)const{
      if(x<_in.x){return true;}
      if(y<_in.y){return true;}
      if(z<_in.z){return true;}
      return false;
    }

関数を作ってあげないとだめだ。

サポートサイト Wikidot.com