2016-10-08 19 views
2

私は取得していますエラーの無い試合を得るのですかはなぜエラー「演算子^」

10:13: error: no match for 'operator^' (operand types are 'std::basic_ostream<char>' and 'int') 
10:13: note: candidates are: 
In file included from /usr/include/c++/4.9/ios:42:0, 
      from /usr/include/c++/4.9/ostream:38, 
      from /usr/include/c++/4.9/iostream:39, 
      from 2: 
/usr/include/c++/4.9/bits/ios_base.h:161:3: note: std::_Ios_Iostate std::operator^(std::_Ios_Iostate, std::_Ios_Iostate) 
operator^(_Ios_Iostate __a, _Ios_Iostate __b) 
^ 

コードが

// Example program 
#include <iostream> 
#include <string> 

int main() 
{ 
int a=1; 
int b=2; 

std::cout<<a^b; 
} 

で何operator ^で使用できるオペランドはありますか?

+0

^ha低い演算子の優先度:括弧std :: cout <<(a^b)を使用します。 –

+0

実際の質問 "演算子^で使用できるオペランドは何ですか?"広いです。 –

答えて

5

Operator Precedenceによると、operator<<は、operator^よりも高い優先度を持ちます。だからstd::cout<<a^b;(std::cout<<a)^b;と同等です。 (std::cout<<a)は、std::basic_ostream<char>であるstd::coutを参照して返します。エラーメッセージが表示されたのと同じように、(std::basic_ostream<char>)とintoperator^と電話することはできません。

演算子にオペランドをバインドする方法の優先順位を指定するには、かっこを使用できます。

std::cout << (a^b); 
//   ~ ~ 
関連する問題