Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Brak zwrotu funkcji, błąd kompilacji

Ostatnio zmodyfikowano 2021-06-05 16:57
Autor Wiadomość
Temat założony przez niniejszego użytkownika
Brak zwrotu funkcji, błąd kompilacji
» 2021-06-05 16:08:48
Witam
Jestem od wczoraj na forum, a tak sprawnie udzielonej pomocy dotychczas jeszcze nie miałem, cały czas walcze z kompilacją mojego starego silnika open tibia server pod nowym systemem debian 10 w którym nowy gcc oraz biblioteki nie przepuszczają na pewnych błędów które nie były problemem przy kompilacji na starszym systemie, poniżej błąd który googluje, ale nie potrafię przełożyć tej poprawki do siebie..
game.cpp: In member function ‘int32_t Game::AutoBoardcaster()’:
game.cpp:9024:1: error: no return statement in function returning non-void [-Werror=return-type]
 }
 ^
game.cpp: In member function ‘int32_t Game::checkOwner()’:
game.cpp:10042:1: error: no return statement in function returning non-void [-Werror=return-type]
 }
 ^

C/C++
int32_t Game::AutoBoardcaster()
{
   
OTSYS_THREAD_LOCK_CLASS lockClass( gameLock, "Game::AutoBoardcaster()" );
   
int32_t count = g_config.BOARDCAST_COUNT;
   
std::stringstream msg;
   
msg << g_config.BOARDCASTS[ random_range( 0, count - 1 ) ];
   
int32_t random_color = random_range( 1, 7 );
   
MessageClasses color = MSG_RED_INFO;
   
switch( random_color )
   
{
   
case 1: color = MSG_ADVANCE; break;
   
case 2: color = MSG_PRIVATE; break;
   
case 3: color = MSG_ORANGE; break;
   
case 4: color = MSG_EVENT; break;
   
case 5: color = MSG_INFO; break;
   
case 6: color = MSG_BLUE_TEXT; break;
   
case 7: color = MSG_RED_TEXT; break;
   
}
   
for( AutoList < Player >::listiterator it = Player::listPlayer.list.begin(); it != Player::listPlayer.list.end(); ++it )
   
{
       
if( dynamic_cast < Player * >( it->second ) )
            ( *
it ).second->sendTextMessage( color, msg.str().c_str() );
       
   
}
   
addEvent( makeTask(( g_config.BOARDCAST_TIME ), std::mem_fun( & Game::AutoBoardcaster ) ) );
}

C/C++
int32_t Game::checkOwner()
{
   
OTSYS_THREAD_LOCK_CLASS lockClass( gameLock, "Game::checkOwner()" );
   
   
list < ownerBlock * >::iterator it;
   
for( it = ownerVector.begin(); it != ownerVector.end(); )
   
{
       
( * it )->ownerTime -= 1;
       
       
list < Item * >::iterator it5;
       
for( it5 =( * it )->ownerItems.begin(); it5 !=( * it )->ownerItems.end(); it5++ )
       
{
           
Item * item = * it5;
           
int32_t sot = item->getOwnerTime() - 1;
           
item->setOwnerTime( sot );
       
}
       
if(( * it )->ownerTime <= 0 )
       
{
           
list < Item * >::iterator it2;
           
for( it2 =( * it )->ownerItems.begin(); it2 !=( * it )->ownerItems.end(); it2++ )
           
{
               
Item * item = * it2;
               
item->setOwner( "" );
           
}
           
delete * it;
           
it = ownerVector.erase( it );
       
}
       
else
       
{
           
it++;
       
}
    }
   
addEvent( makeTask( 1000, std::mem_fun( & Game::checkOwner ) ) );
}

Z góry dziękuje za pomoc, i bym był wdzięczny gdyby ktoś mnie nakierował i wytłumaczył na przyszłość jak się zachować w przypadku takich błędów.
P-178716
» 2021-06-05 16:14:25
Te funkcje są zdefiniowane jako zwracające liczbę typu int32_t, a niczego nie zwracają. Zobacz do czego w ogóle są używane zwracane wartości z tych funkcji i dopisz zwracanie czegoś z sensem. Jeżeli nie są używane, to najlepiej przerób te funkcje na void.
P-178717
Temat założony przez niniejszego użytkownika
» 2021-06-05 16:44:04
Przerobiłem te funkcje na void, kompilacja poszła, w kolejnej funkcji jest ten sam problem, ale tutaj przeanalizowałem kilka plików i nie jestem w stanie napisać od nowa wielu funkcji powiązanych z tym kodem, wymaga to wiele doświadczenia którego nie mam, a brakuje mi osoby która była by w stanie za opłatą wprowadzić tyle zmian w funkcji:
C/C++
bool Player::CanSee( int32_t x, int32_t y, int32_t z ) const
{
   
if( client ) {
       
return client->CanSee( x, y, z );
   
}
}
player.cpp: In member function ‘bool Player::CanSee(int32_t, int32_t, int32_t) const’:
player.cpp:1887:1: error: control reaches end of non-void function [-Werror=return-type]

Funkcja bool która nie zwraca żadnej wartości true lub false, czy tutaj trzeba zastosować
else{ return false;}
?
P-178718
» 2021-06-05 16:47:09
Pewnie to nie jest przypadek jaki występuje w czasie normalnej pracy, więc może nie być znaczenia co dokładnie zwrócisz. Pewnie wystarczy postawić return false za tym ifem.
P-178719
Temat założony przez niniejszego użytkownika
» 2021-06-05 16:57:12
Kompilacja się powiodła, dziękuje jeszcze raz za pomoc, temat zamknięty, Pozdrawiam!
P-178720
« 1 »
  Strona 1 z 1