• There is NO official Otland's Discord server and NO official Otland's server list. The Otland's Staff does not manage any Discord server or server list. Moderators or administrator of any Discord server or server lists have NO connection to the Otland's Staff. Do not get scammed!

Solved Error When Compiling TFS 0.3.6pl1 V5 in CodeBlocks

tarekwiz

Hellbot Owner
Joined
Feb 17, 2011
Messages
240
Reaction score
7
Here is the Error - Hope Anybody Could Help
PHP:
||=== TheForgottenServer, default ===|
C:\Users\Tarek\Desktop\Source 5.0\luascript.cpp||In member function 'bool LuaScriptInterface::loadDirectory(const std::string&, Npc*)':|
C:\Users\Tarek\Desktop\Source 5.0\luascript.cpp|719|error: 'class boost::filesystem3::directory_entry' has no member named 'leaf'|
||=== Build finished: 1 errors, 0 warnings ===|
 
This is easy.

Update your boost, is a boost problem.
No. Other way around. In this sense, you would have to mean 'downgrade' your Boost.


I encountered this myself, So I will relate this as a story. I solved this without even having to visit OTLand.

I get all set up to compile, Newly installed GCC 4.7 Freshly compiled Lua 5.1.5. Nice fresh Boost 1.52. I had downloaded forgottenserver-0.3.6pl1.r101.tar.gz (actually I was working with rev3884 since I run an 8.6 server, but that's irrelevant, work with me here!)

I do 'autoreconf -vfi'
I do 'CC="ccache gcc" ./configure --enable-mysql'
I do 'make'
I notice some errors. I sigh. I hate errors. So I say to myself lets find as many as make's 'keep going' option will; so we can squash as many at a time as we can.
I do 'make -k' wait for it to finish and then do 'make -k' again and I get....

Lets stop right here. I want you to soak this one up. What I just did there, make -k followed by a second run means the second time all I'm going to get is the relevant errors and no extraneous distractions. With any future problems you may encounter, this makes the amount of 'post the output' members may ask you for to help you much smaller. A good thing.

continuing... I get this:

Code:
luascript.cpp:     In member function 'bool LuaScriptInterface::loadDirectory(const string&, Npc*)':
luascript.cpp:719:23:     error: 'class boost::filesystem::directory_entry' has no member named 'leaf'

scriptmanager.cpp: In member function 'bool ScriptingManager::loadMods()':
scriptmanager.cpp:122:23: error: 'class boost::filesystem::directory_entry' has no member named 'leaf'

A google search for
error: 'class boost::filesystem::directory_entry' has no member named 'leaf'
reveals (some StackExchange questions and some forum posts that all basically boil down to ->) this
Filesystem Deprecated Features

Line 122 of scriptmanager.cpp and line 719 of luascript.cpp are identical; this:
Code:
        std::string s = it->leaf();

Having just lazily glanced at the page and thought they merely renamed the function, I change both instances of 'leaf()' to 'filename()'. No good. Same error except it says filename instead of leaf. I look back at that Boost page and examine it more closely. I see
class directory_entry filename() Function removed, use path().filename() instead.
class directory_entry leaf() Function removed, use path().filename() instead.

So I change both instances I just previously altered to 'path().filename()' this time. Something different!
Code:
error: conversion from 'boost::filesystem::path' to non-scalar type 'std::string {aka std::basic_string<char>}' requested

Now on that Boost page I had also noticed
class directory_entry string() Function removed, use path().string() instead.

So I again change both instances I just previously altered, now to 'path().filename().string()' this time. Victory! For me at least. IF you encounter any problems, let me know. I don't normally care, but this took some time to write up, so rep++ if it solves your problem, please.



TL;DR: Change leaf() to path().filename().string()
 
Last edited:
Isso é facil.


Não. Outra maneira. Nesse sentido, você deveria significar 'rebaixar' seu Boost.


Eu mesmo encontrei isso, então vou contar isso como uma história. Resolvi isso sem precisar visitar a OTLand.

Eu tenho tudo configurado para compilar, Recém-instalado GCC 4.7 Recém-compilado Lua 5.1.5 . Boost fresco agradável 1.52 . Eu tinha baixado o foroottenserver-0.3.6pl1.r101.tar.gz (na verdade, eu estava trabalhando com o rev3884 desde que executo um servidor 8.6, mas isso é irrelevante, trabalhe comigo aqui!)

Eu faço ' autoreconf -vfi '
Eu faço ' CC = "ccache gcc" ./configure --enable-mysql '
Eu faço ' fazer '
Eu noto alguns erros. Eu suspiro. Eu odeio erros. Então, eu digo a mim mesmo, vamos encontrar o máximo que a opção de 'continuar' do make; para que possamos esmagar o máximo de uma vez.
Eu faço ' make -k ', espero terminar e então faço ' make -k ' novamente e eu recebo ...

Vamos parar por aqui. Eu quero que você absorva este aqui. O que acabei de fazer lá, make -k seguido por uma segunda execução significa que, da segunda vez, tudo o que vou obter são os erros relevantes e nenhuma distração externa. Com quaisquer problemas futuros que você possa encontrar, isso torna muito menor a quantidade de 'postar a saída' que os membros podem pedir para ajudá-lo . Uma coisa boa.

continuando ... Eu entendo:

[CÓDIGO] luascript.cpp: Na função de membro 'bool LuaScriptInterface :: loadDirectory (const string &, Npc *)':
luascript.cpp: 719: 23: error: 'class boost :: filesystem :: directory_entry' não tem nenhum membro chamado 'leaf'

scriptmanager.cpp: na função de membro 'bool ScriptingManager :: loadMods ()':
scriptmanager.cpp: 122: 23: erro: 'class boost :: filesystem :: directory_entry' não tem nenhum membro chamado 'leaf' [/ CODE]

Uma pesquisa no Google por revela (algumas perguntas do StackExchange e algumas postagens de fórum que basicamente se resumem a ->) isso
Recursos obsoletos do sistema de arquivos

A linha 122 de scriptmanager.cpp e a linha 719 de luascript.cpp são idênticas; esta:
[CÓDIGO] std :: string s = it-> folha (); [/ CODE]

Depois de olhar preguiçosamente para a página e pensar que eles simplesmente renomearam a função, altero as duas instâncias de ' leaf () ' para ' filename () '. Nada de bom. Mesmo erro, exceto que diz nome do arquivo em vez de folha. Eu olho para trás para a página Boost e examino-a mais de perto. eu vejo


Portanto, eu mudo as duas instâncias que alterei anteriormente para ' path (). Filename () ' desta vez. Algo diferente!
[CÓDIGO] erro: conversão de 'boost :: filesystem :: path' para tipo não escalar 'std :: string {aka std :: basic_string <char>}' solicitada [/ CODE]

Na página do Boost, também notei


Então, eu altero novamente as duas instâncias que acabei de alterar, agora para ' path (). Filename (). String () ' desta vez. Vitória! Para mim, pelo menos. SE você encontrar algum problema, me avise. Eu normalmente não me importo, mas demorou um pouco para escrever, então rep ++ se isso resolver seu problema, por favor.



TL; DR: Alterar folha () para caminho (). Nome do arquivo (). String ()
omg thanks man you save my life <3
 
Back
Top