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

Перегрузка бинарной операции < - C++

Восстановить пароль Регистрация
 
stawerfar
 Аватар для stawerfar
141 / 55 / 4
Регистрация: 14.12.2010
Сообщений: 347
Записей в блоге: 1
09.08.2012, 12:18     Перегрузка бинарной операции < #1
Всем привет написал перегрузку для структуры:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
    typedef struct t_FileInfo
    {
        t_String file_name; /*имя файла*/
        t_String file_way;  /*адрес к файлу*/
 
        /*конструктор с параметрами*/
        t_FileInfo(t_String fn = (""),
                   t_String fw = ("")) :
                                         file_name(fn),
                                         file_way(fw)
        {}
 
    /*перегрузка оператора сравнения*/
 
    t_Bool operator < (const t_FileInfo second);
 
    }t_FileInfo; /*Структура для хранения имени файла и его полного адресса*/
 
    t_Bool t_FileInfo::operator < (const t_FileInfo second)
    {
        /*задать регулярное выражения для опредиления соответствия*/
        t_Boost::regex xRegEx("[\\d\\D\\w\\W\\.]+(\\.(c)|(cpp))$");
        /*поиск соответствия*/
        t_Bool bfirst  = t_Boost::regex_match( this->file_name.c_str(), xRegEx );
        t_Bool bsecond = t_Boost::regex_match( second.file_name.c_str(), xRegEx );
 
        /*проверка входящей строки на соответствие шаблону*/
        if((bfirst == bsecond)||(bfirst && !bsecond))
        {
            return (true);
        }
        else
        {
            return (false);
        }   
    }
Дальше использую это для сортировки вектора подобных значений.
Я пишу и под Linux и под Win32 по этому часто некоторые вещи делаю на разных компиляторах, ну для линукс я использую стандартный компилятор CodaBolx а для винды компилятор VS2010.
На линуховском компиляторе проканывает без ошибок и варингов, а вот на win32 пишет ниже скрин.
Как этого избежать, или игнорить ведь если нажимать продолжить то в итоге он сортирует как надо.
Миниатюры
Перегрузка бинарной операции <  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.08.2012, 12:18     Перегрузка бинарной операции <
Посмотрите здесь:

Перегрузка операции C++
C++ Перегрузка операции
Перегрузка операции + C++
C++ Перегрузка операции =
C++ Ошибка компиляции: нет перегруженной бинарной операции +.
Перегрузка операции ~ C++
Перегрузка операции >> C++
C++ Перегрузка операции

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
09.08.2012, 12:21     Перегрузка бинарной операции < #2
1. оператор должен быть константным
C++
1
t_Bool t_FileInfo::operator < (const t_FileInfo& second) const
2.
Цитата Сообщение от stawerfar Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
if((bfirst == bsecond)||(bfirst && !bsecond))
* * * * {
* * * * * * return (true);
* * * * }
* * * * else
* * * * {
* * * * * * return (false);
* * * * }
C++
1
return ((bfirst == bsecond)||(bfirst && !bsecond));
stawerfar
 Аватар для stawerfar
141 / 55 / 4
Регистрация: 14.12.2010
Сообщений: 347
Записей в блоге: 1
09.08.2012, 12:35  [ТС]     Перегрузка бинарной операции < #3
исправил ошибка осталась! только одну вещь заметил если поменять местами
C++
1
2
3
4
5
6
7
8
if((bfirst == bsecond)||(bfirst && !bsecond))
* * * * {
* * * * * * return (true); /*тут на false*/
* * * * }
* * * * else
* * * * {
* * * * * * return (false); /*тут на true*/
* * * * }
то работает без ошибки но сортирует не в ту сторону как только я использую старую комбинацию опять вылазить ошибка.
PS: может я неправильно написал сам объект вот код
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    /*функциональны объект для сотритовки списка файлов по критерию расширения*/
    class Extension
    {
        public:
        t_Bool operator() (const t_FileInfo&  first, const t_FileInfo&  second)const;
    };
 
    /*опредиление метода класса Extension для сортировки файлов*/
    t_Bool Extension::operator() (const t_FileInfo&  first, const t_FileInfo&  second)const
    {
        t_FileInfo s = first,d = second;
        return (s > d);
    }
//вызов сортировки такой
....
 /*сортировка вектора имен и адрессов найденных файлов по типу расширения, приоритет файлам с расширениями *.с и *.cpp*/
        std::sort(this->files_info.begin(),this->files_info.end(),Extension());
Yandex
Объявления
09.08.2012, 12:35     Перегрузка бинарной операции <
Ответ Создать тему
Опции темы

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