Форум программистов, компьютерный форум, киберфорум
C/С++ под Linux
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 31.08.2016
Сообщений: 11
1

UTIL_ToUInt32

12.05.2018, 11:07. Показов 555. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день. Имеется такой код:
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
 if(  Command == "addadmin" || Command == "aa"  )
        {
            stringstream SS;
            string Name, Date, NewData, BaseDate, Days, BeforeDays;
 
            SS << Payload;
            SS >> Name;
            if( !SS.eof())
            {
                SS >> NewData;
                string DateChars = "0123456789";
 
                if( NewData.find_first_not_of( DateChars ) == string :: npos )
                {
                    if( UTIL_ToUInt32(NewData)>365 )
                    {
                        QueueChatCommand( "Количество дней не может превышать 365!", User, Whisper );
                        return;
                    }
                    else if( UTIL_ToUInt32(NewData)>0 )
                    {
                        CDBTimeAdmin *TimeAdmin = TimeAdminName( Name );
                        if( TimeAdmin )
                        {
                            BeforeDays = UTIL_ToString( UTIL_ToUInt32(TimeAdmin->GetDaysRemaining()) );
                            Date = UTIL_ToString( UTIL_ToUInt32(NewData)+UTIL_ToUInt32(TimeAdmin->GetDaysRemaining()) );
                            BaseDate = UTIL_ToString( UTIL_ToUInt32(NewData)+UTIL_ToUInt32(TimeAdmin->GetDaysRemaining()) + 3 );
                            Days = UTIL_ToString( UTIL_ToUInt32(NewData)+UTIL_ToUInt32(TimeAdmin->GetDaysRemaining()) );
                        }
                        else
                        {
                            Date = UTIL_ToString( UTIL_ToUInt32(NewData) + 0 );
                            BaseDate = UTIL_ToString( UTIL_ToUInt32(NewData) + 3 );
                            Days = UTIL_ToString(UTIL_ToUInt32(NewData)+0);
                            BeforeDays = UTIL_ToString(UTIL_ToUInt32(NewData)+0);
                        }
 
                        struct tm * timeinfo;
                        char buffer [80];
                        time_t NowDate = time( NULL );
                        time_t NowDateBase = time( NULL );
                        NowDate += 3600*24*UTIL_ToUInt32(Date);
                        timeinfo = localtime( &NowDate );
                        strftime (buffer,80,"%Y-%m-%d",timeinfo);
                        Date = buffer;
 
                        if( UTIL_ToUInt32(BaseDate)>0 )
                        {
                            NowDateBase += 3600*24*UTIL_ToUInt32(BaseDate);
                            timeinfo = localtime( &NowDateBase );
                            strftime (buffer,80,"%Y-%m-%d",timeinfo);  
                            BaseDate = buffer;
                        }
                    }
                    else
                    {
                        QueueChatCommand( "Количество дней не может быть равно 0!", User, Whisper );
                        return;
                    }
                }
                else
                {
                    QueueChatCommand( "Количество дней может содержать только цифры!", User, Whisper );
                    return;
                }
 
                CDBTimeAdmin *TimeAdmin = TimeAdminName( Name );
                
                if ( TimeAdmin )
                {
                    if( IsAdmin( Name ) )
                        QueueChatCommand( "Дата Администратора " + Name + " обновлена до " + Date + " (дней: " + BeforeDays + "->" + Days + ")", User, Whisper );
                    else
                        QueueChatCommand( Name + " восстановлен в Администраторы до " + Date + " (дней: " + BeforeDays + "->" + Days + ")", User, Whisper );
 
                    m_GHost->m_Callables.push_back(m_GHost->m_DB->ThreadedAdminUpdate(m_Server, Name, Date, BaseDate, User));
 
                    RemoveAdmin( Name );
                    RemoveTimeAdmin( Name );
 
                    AddAdmin( Name );
                    AddTimeAdmin( Name, Date );
                }
                else
                {
                    m_PairedAdminAdds.push_back( PairedAdminAdd( User, m_GHost->m_DB->ThreadedAdminAdd(m_Server, Name, Date, BaseDate, User) ) );
                    QueueChatCommand( Name + " добавлен в Администраторы до " + Date + " (дней: " + Days + ")", User, Whisper );
                }
            }
            else
                QueueChatCommand( "Укажите количество дней", User, Whisper );
        }
При компиляции на винде процесс проходит успешно и без ошибок, под 38 бустами. Но стоит начать на убунте, при 66 бустах - вылетает такая ошибка :

C++
1
2
3
4
5
6
error: invalid initialization of non-const reference of type  std::__cxx11::string& {aka std::__cxx11::basic_string<char>&}' from an rvalue of type 'std::__cxx11::string {aka std::__cxx11::basic_string<char>}'
 String( UTIL_ToUInt32(NewData)+UTIL_ToUInt32(TimeAdmin->GetDaysRemaining()) );
                                                                         ^
In file included from bnet.cpp:22:0:
util.h:58:10: note:   initializing argument 1 of 'uint32_t UTIL_ToUInt32(std::__cxx11::string&)'
 uint32_t UTIL_ToUInt32( string &s );
Сами фаилы Утил.спп и .н пока не выкладываю, может дело в stringstream. Помогите, подскажите что не так тут ?
0
Форумчанин
Эксперт CЭксперт С++
8215 / 5045 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
16.05.2018, 16:15 2
Надо использовать const std::string & в параметрах.
Студия позволяет привязывать к nonconst ref.
0
0 / 0 / 0
Регистрация: 31.08.2016
Сообщений: 11
02.06.2018, 12:24  [ТС] 3
Можно чуть по подробнее, в каком файле мне необходимо это исправить ? Или саму команду переделывать придется ?
0
02.06.2018, 12:24
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru