2015-04-21 3 views
1

Так что, работая над этим заданием, я застрял, потому что получил эту ошибку. Я сделал перегрузку оператора раньше, так что это стало неожиданностью.Ошибка: нет соответствия для оператора << в std :: cout (я уже перегрузил оператор << 0)

class RGB 
{ 
public: 

    RGB(float r1, float g1, float b1); 
    RGB(RGB const& color); //copy constructor 
    RGB(); 

    friend ostream& operator<<(ostream& os, RGB& color); 
    friend istream& operator>>(istream& is, RGB& color); 

    friend float r(); 
    friend float g(); 
    friend float b(); 
private: 
    float r, g, b; 
}; 

//Something something 

RGB::RGB(float r1, float g1, float b1){ 
    r = r1; 
    g = g1; 
    b = b1; 
} 

//Something something 

ostream& operator<<(ostream& os, const RGB& color){ // << Overloading 
    return os<<"Red: "<<color.r<<endl<<"Green: "<<color.g<<endl<<"Blue: "<<color.b<<endl; 
} 

И это в главном

int main() 
{ 
    RGB mycolor(1,2,3); 
    cout<<mycolor; 

return 0; 
} 

Так появляется вышеуказанная ошибка, не могу найти то, что случилось. Любая помощь будет оценена по достоинству.

+0

У вас нет некоторых включений и std :: ostream/std :: istream (std), и, пожалуйста, не исправляйте это с использованием пространства имен std –

+0

Я использую std_lib_facilities от strouspup, и мне не нужен std :: foo , Опять же, я уже сделал это в другом задании для векторного класса, который выглядел почти так же, как этот, но теперь это не сработает. –

ответ

2

Я считаю, что существует неправильное совпадение между вашей декларацией и определением. Вы объявляете RGB& color, в то время как ваше определение принимает const RGB& color. Попробуйте объявить operator << как это:

friend ostream& operator<<(ostream& os, const RGB& color); 
1

Декларация вы предоставили

friend ostream& operator<<(ostream& os, RGB& color); 

И определение вы предоставили

ostream& operator<<(ostream& os, const RGB& color) 
//        ^^^^^ 

Обратите внимание на разницу?

+0

Wooops! Слишком плохо, что он производит ту же ошибку даже после изменения. –

+0

@AkisKiraleos [Нет, это не так) (http://coliru.stacked-crooked.com/a/fabbd7f29d284806). Или [по-другому] (http://coliru.stacked-crooked.com/a/a742b9ae99fb219d) (не делайте этого, добавьте 'const' в объявление). – Praetorian

+0

Ну, это смущает [!!!] (http://prntscr.com/6wlrmw) –

Смежные вопросы