Jump to content

Can't compile F4SE without adding #include <string>


Recommended Posts

Hello.

 

I installed Microsoft VisualStudio 2019 community edition and was able (with help from WolfMark) to compile the latest version (06.17) of F4SE immediately without any problems.

 

When I try with ANY other version (I tried 06.10, 06.15 and 06.16) - I get over 3000 errors relating to "string". Here's a quick look at the first few -

1>------ Build started: Project: common_vc11, Configuration: Debug x64 ------
1>IBufferStream.cpp
1>IDataStream.cpp
1>IDebugLog.cpp
1>IDirectoryIterator.cpp
1>C:\Users\Kev\Downloads\f4se_0_06_16\src\common\IDirectoryIterator.h(11,7): error C2039:  'string': is not a member of 'std'
1>C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.21.27702\include\cstdarg(18): message :  see declaration of 'std'
1>C:\Users\Kev\Downloads\f4se_0_06_16\src\common\IDirectoryIterator.h(11,25): error C3646:  'GetFullPath': unknown override specifier
1>C:\Users\Kev\Downloads\f4se_0_06_16\src\common\IDirectoryIterator.h(11,25): error C2059:  syntax error: '('
1>C:\Users\Kev\Downloads\f4se_0_06_16\src\common\IDirectoryIterator.h(11,31): error C2238:  unexpected token(s) preceding ';'
1>C:\Users\Kev\Downloads\f4se_0_06_16\src\common\IDirectoryIterator.cpp(31,1): error C2511:  'std::string IDirectoryIterator::GetFullPath(void)': overloaded member function not found in 'IDirectoryIterator'
1>C:\Users\Kev\Downloads\f4se_0_06_16\src\common\IDirectoryIterator.h(3): message :  see declaration of 'IDirectoryIterator'

Here's the full log.

 

After fiddling about for a few hours, I found that if I add

#include <string>

to the top of common_vc11/iPrefix.h - then all errors vanish and it seemingly compiles perfectly!

 

I didn't have to do that when compiling F4SE version 06.17 - it worked flawlessly out of the box!

 

There must be a simple reason for this, anyone have any clues?

 

Thanks :smile:.

 

 

Link to comment
Share on other sites

The IPrefix.h from F4SE 0.6.17 version contains #include <string>.

The IPrefix.h from F4SE 0.6.16 version doesn't contain the #include <string>.


This is why you compiled without changes 0.6.17.


Probably in Visual Studio 2012 (the one used by F4SE team) the <string> header is already included by other headers.

And this is not true in Visual Studio 2019 (the version you're using) anymore.


For older F4SE versions you have to add #include <xmmintrin.h> to BSSkin.h, but they fixed this in 0.6.14.

Also you had to add #include <algorithm> to PapyrusObjects.h.

Link to comment
Share on other sites

Hi WolfMark, I didn't want to annoy you by asking you directly (after you did so much hard work for me) but I'm so glad you replied :D.

 

Hahaha, yes you're absolutely correct - I didn't notice that - DOH!

 

Oh well, it's always better to have an expert opinion rather than rely on luck.

 

I just tested the version I built against F4SE 06.16 and it works perfectly. I went through your instructions again and found qword_1458CEE98, so I'm quietly confident that I can find it again in the next F4SE version.

 

Thanks again for your wisdom & help WolfMark :thumbsup:.

Link to comment
Share on other sites

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...