Невозможно перегрузить оператор << в C ++, используя шаблонную функцию Friend, если у класса есть другая функция - PullRequest
0 голосов
/ 12 мая 2018
class A {
public:
    template<typename T>
    friend ostream& operator<<(ostream &obj, T *a);

    fun() {
        //cout<<"hello"; // code is doing well without this line
    }
};

template<typename T>
ostream& operator<<(ostream &obj,T *a){
}

main() {
    A *obj;
    ofstream fout;
    fout<<obj;
}

Журналы ошибок после раскомментирования строки

In member function 'int A::fun()':
[Error] ambiguous overload for 'operator<<' (operand types are 'std::ostream {aka std::basic_ostream<char>}' and 'const char [7]')
[Note] std::basic_ostream<_CharT, _Traits>::__ostream_type& std::basic_ostream<_CharT, _Traits>::operator<<(long int) [with _CharT = char; _Traits = std::char_traits<char>; std::basic_ostream<_CharT, _Traits>::__ostream_type = std::basic_ostream<char>] <near match>

Я хочу перегрузить operator<< этой функцией. Что я могу сделать?

1 Ответ

0 голосов
/ 12 мая 2018

Из того, что видно, скорее всего, вы пытаетесь создать A или эквивалент (A и т. Д.), Который создает оператор для char или const char.Поскольку уже есть и оператор const char, определенный в библиотеке C ++, компилятор не знает, какой из них использовать, что создает ошибку «неоднозначной перегрузки».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...