Форум программистов, компьютерный форум CyberForum.ru

Амбигус между char и bool - C++

Восстановить пароль Регистрация
 
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
25.11.2014, 18:17     Амбигус между char и bool #1
C:\Projects\Test\Test\test.cpp|36|error: ambiguous overload for 'operator<<' (operand types are 'std::ofstream {aka std::basic_ofstream<char>}' and 'char')|
на строку
C++
1
Stream<<*p;
, где
C++
1
char *p;
, выше
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
        std::ofstream                 &operator <<                                            (      std::ofstream    &Stream          ,
                                                                                                     bool              Flag            )
{
 if (Flag)
 {
  Stream<<"true";
 }
 else
 {
  Stream<<"false";
 }
 return Stream;
}
. Если убрать
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
        std::ofstream                 &operator <<                                            (      std::ofstream    &Stream          ,
                                                                                                     bool              Flag            )
{
 if (Flag)
 {
  Stream<<"true";
 }
 else
 {
  Stream<<"false";
 }
 return Stream;
}
, то еэйси. Как исправить?
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
TheCalligrapher
С чаем беда...
Эксперт С++
 Аватар для TheCalligrapher
2909 / 1445 / 397
Регистрация: 18.10.2014
Сообщений: 2,668
25.11.2014, 18:39     Амбигус между char и bool #2
Цитата Сообщение от taras atavin Посмотреть сообщение
Как исправить?
Перед тем, как гадать на тему "как исправить", надо сначала выяснить, с кем тут возникло ambiguity. Кто еще-то значится в списке кандидатов?
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
25.11.2014, 18:47  [ТС]     Амбигус между char и bool #3
Есть ещё
C++
1
std::ofstream &operator << (std::ofstream &Stream, const std::wstring &String);
,
C++
1
std::ofstream &operator << (std::ofstream &Stream, const wchar_t *String);
,
C++
1
#include <iostream>
и
C++
1
#include <fstream>
. Но не однозначность исчезает если убрать только перегруженный оператор для bool, этого достаточно, но мне нежна эта версия оператора.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11845 / 6824 / 771
Регистрация: 27.09.2012
Сообщений: 16,919
Записей в блоге: 2
Завершенные тесты: 1
25.11.2014, 19:19     Амбигус между char и bool #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
А std::boolalpha не подойдет?
TheCalligrapher
С чаем беда...
Эксперт С++
 Аватар для TheCalligrapher
2909 / 1445 / 397
Регистрация: 18.10.2014
Сообщений: 2,668
25.11.2014, 20:19     Амбигус между char и bool #5
Цитата Сообщение от taras atavin Посмотреть сообщение
Но не однозначность исчезает если убрать только перегруженный оператор для bool, этого достаточно, но мне нежна эта версия оператора.
Я не совсем понимаю сути вопроса. У стандартных потоков уже есть перегруженная версия оператора для 'bool'. То есть эта версия уже занята. "Захватить" ее под себя, т.е. перекрыть своей версией - невозможно. Такой возможности в С++ нет. Напишете еще один оператор для 'bool' - получите ambiguity.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11845 / 6824 / 771
Регистрация: 27.09.2012
Сообщений: 16,919
Записей в блоге: 2
Завершенные тесты: 1
26.11.2014, 03:53     Амбигус между char и bool #6
Ну, как вариант:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
struct X
{
    explicit X ( bool val ) : value ( val ) {}
    operator bool () {return value;}
    bool value ;
} ;
 
 
std::ostream & operator<< ( std::ostream & stream , X value )
{
    if ( value )
        stream << "value - true" ;
    else
        stream << "value - false" ;
    return stream ;
}
 
 
//...
    std::cout << X(true) << std::endl ;
Yandex
Объявления
26.11.2014, 03:53     Амбигус между char и bool
Ответ Создать тему
Опции темы

Текущее время: 12:21. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru