Zomon333 / SadBoat-Engine

I was listening to someone play ukelele and it made me want to program a platformer. This is that.
3 stars 0 forks source link

Resolve compiler error #7

Closed Zomon333 closed 2 years ago

Zomon333 commented 2 years ago

Compiler throws errors with Registry information having deleted functions:


C:\Users\zomon\Desktop\SadBoat\SBE>nmake remake

Microsoft (R) Program Maintenance Utility Version 14.30.30709.0
Copyright (C) Microsoft Corporation.  All rights reserved.

        nmake clean

Microsoft (R) Program Maintenance Utility Version 14.30.30709.0
Copyright (C) Microsoft Corporation.  All rights reserved.

        del *.exe *.obj *.ilk *.pdb
        nmake

Microsoft (R) Program Maintenance Utility Version 14.30.30709.0
Copyright (C) Microsoft Corporation.  All rights reserved.

        cl /std:c++20 /WX /EHsc /Gd /JMC /permissive- /GS /Zi /Gm- /Od /sdl /MD src\main.cpp includes\glad.c lib/GLAD.lib lib/glfw3.lib opengl32.lib glu32.lib lib/assimp.lib lib/freetype.lib lib/irrKlang.lib lib/STB_IMAGE.lib lib/glew32s.lib kernel32.lib user32.lib gdi32.lib winspool.lib shell32.lib ole32.lib oleaut32.lib uuid.lib comdlg32.lib advapi32.lib lib/SOIL.lib odbc32.lib odbccp32.lib /I includes\ /I lib
Microsoft (R) C/C++ Optimizing Compiler Version 19.30.30709 for x64
Copyright (C) Microsoft Corporation.  All rights reserved.

main.cpp
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.30.30705\include\unordered_map(50): error C2280: 'std::_Uhash_compare<_Kty,_Hasher,_Keyeq>::_Uhash_compare(const std::_Uhash_compare<_Kty,_Hasher,_Keyeq> &)': attempting to reference a deleted function
        with
        [
            _Kty=std::pair<int,int>,
            _Hasher=std::hash<std::pair<int,int>>,
            _Keyeq=std::equal_to<std::pair<int,int>>
        ]
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.30.30705\include\xhash(165): note: compiler has generated 'std::_Uhash_compare<_Kty,_Hasher,_Keyeq>::_Uhash_compare' here
        with
        [
            _Kty=std::pair<int,int>,
            _Hasher=std::hash<std::pair<int,int>>,
            _Keyeq=std::equal_to<std::pair<int,int>>
        ]
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.30.30705\include\xhash(165): note: 'std::_Uhash_compare<_Kty,_Hasher,_Keyeq>::_Uhash_compare(const std::_Uhash_compare<_Kty,_Hasher,_Keyeq> &)': function was implicitly deleted because a data member invokes a deleted or inaccessible function 'std::_Compressed_pair<_Hasher,std::_Compressed_pair<_Keyeq,float,true>,true>::_Compressed_pair(const std::_Compressed_pair<_Hasher,std::_Compressed_pair<_Keyeq,float,true>,true> &)'
        with
        [
            _Kty=std::pair<int,int>,
            _Hasher=std::hash<std::pair<int,int>>,
            _Keyeq=std::equal_to<std::pair<int,int>>
        ]
        and
        [
            _Hasher=std::hash<std::pair<int,int>>,
            _Keyeq=std::equal_to<std::pair<int,int>>
        ]
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.30.30705\include\xmemory(1380): note: 'std::_Compressed_pair<_Hasher,std::_Compressed_pair<_Keyeq,float,true>,true>::_Compressed_pair(const std::_Compressed_pair<_Hasher,std::_Compressed_pair<_Keyeq,float,true>,true> &)': function was implicitly deleted because a base class invokes a deleted or inaccessible function 'std::hash<Key>::hash(const std::hash<Key> &)'
        with
        [
            _Hasher=std::hash<std::pair<int,int>>,
            _Keyeq=std::equal_to<std::pair<int,int>>
        ]
        and
        [
            Key=std::pair<int,int>
        ]
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.30.30705\include\type_traits(2118): note: 'std::hash<Key>::hash(const std::hash<Key> &)': function was implicitly deleted because a base class invokes a deleted or inaccessible function 'std::_Conditionally_enabled_hash<_Kty,false>::_Conditionally_enabled_hash(const std::_Conditionally_enabled_hash<_Kty,false> &)'
        with
        [
            Key=std::pair<int,int>
        ]
        and
        [
            _Kty=std::pair<int,int>
        ]
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.30.30705\include\type_traits(2104): note: 'std::_Conditionally_enabled_hash<_Kty,false>::_Conditionally_enabled_hash(const std::_Conditionally_enabled_hash<_Kty,false> &)': function was explicitly deleted
        with
        [
            _Kty=std::pair<int,int>
        ]
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.30.30705\include\unordered_map(50): note: while compiling class template member function 'std::_Umap_traits<_Kty,_Ty,std::_Uhash_compare<_Kty,_Hasher,_Keyeq>,_Alloc,false>::_Umap_traits(const _Tr &) noexcept(false)'
        with
        [
            _Kty=std::pair<int,int>,
            _Ty=Hitbox *,
            _Hasher=std::hash<std::pair<int,int>>,
            _Keyeq=std::equal_to<std::pair<int,int>>,
            _Alloc=std::allocator<std::pair<const std::pair<int,int>,Hitbox *>>,
            _Tr=std::_Uhash_compare<std::pair<int,int>,std::hash<std::pair<int,int>>,std::equal_to<std::pair<int,int>>>
        ]
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.30.30705\include\xhash(362): note: see reference to function template instantiation 'std::_Umap_traits<_Kty,_Ty,std::_Uhash_compare<_Kty,_Hasher,_Keyeq>,_Alloc,false>::_Umap_traits(const _Tr &) noexcept(false)' being compiled
        with
        [
            _Kty=std::pair<int,int>,
            _Ty=Hitbox *,
            _Hasher=std::hash<std::pair<int,int>>,
            _Keyeq=std::equal_to<std::pair<int,int>>,
            _Alloc=std::allocator<std::pair<const std::pair<int,int>,Hitbox *>>,
            _Tr=std::_Uhash_compare<std::pair<int,int>,std::hash<std::pair<int,int>>,std::equal_to<std::pair<int,int>>>
        ]
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.30.30705\include\xhash(321): note: see reference to class template instantiation 'std::_Umap_traits<_Kty,_Ty,std::_Uhash_compare<_Kty,_Hasher,_Keyeq>,_Alloc,false>' being compiled
        with
        [
            _Kty=std::pair<int,int>,
            _Ty=Hitbox *,
            _Hasher=std::hash<std::pair<int,int>>,
            _Keyeq=std::equal_to<std::pair<int,int>>,
            _Alloc=std::allocator<std::pair<const std::pair<int,int>,Hitbox *>>
        ]
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.30.30705\include\unordered_map(67): note: see reference to class template instantiation 'std::_Hash<std::_Umap_traits<_Kty,_Ty,std::_Uhash_compare<_Kty,_Hasher,_Keyeq>,_Alloc,false>>' being compiled
        with
        [
            _Kty=std::pair<int,int>,
            _Ty=Hitbox *,
            _Hasher=std::hash<std::pair<int,int>>,
            _Keyeq=std::equal_to<std::pair<int,int>>,
            _Alloc=std::allocator<std::pair<const std::pair<int,int>,Hitbox *>>
        ]
C:\Users\zomon\Desktop\SadBoat\SBE\src\registry.h(16): note: see reference to class template instantiation 'std::unordered_map<Key,Content,std::hash<Key>,std::equal_to<Key>,std::allocator<std::pair<const Key,Content>>>' being compiled
        with
        [
            Key=std::pair<int,int>,
            Content=Hitbox *
        ]
C:\Users\zomon\Desktop\SadBoat\SBE\src\hitbox.h(44): note: see reference to class template instantiation 'Registry<std::pair<int,int>,Hitbox *>' being compiled
Generating Code...
Compiling...
glad.c
Generating Code...
NMAKE : fatal error U1077: '"C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.30.30705\bin\HostX64\x64\cl.EXE"' : return code '0x2'
Stop.
NMAKE : fatal error U1077: '"C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.30.30705\bin\HostX64\x64\nmake.EXE"' : return code '0x2'
Stop.

C:\Users\zomon\Desktop\SadBoat\SBE>nmake remake

Microsoft (R) Program Maintenance Utility Version 14.30.30709.0
Copyright (C) Microsoft Corporation.  All rights reserved.

        nmake clean

Microsoft (R) Program Maintenance Utility Version 14.30.30709.0
Copyright (C) Microsoft Corporation.  All rights reserved.

        del *.exe *.obj *.ilk *.pdb
        nmake

Microsoft (R) Program Maintenance Utility Version 14.30.30709.0
Copyright (C) Microsoft Corporation.  All rights reserved.

        cl /std:c++20 /WX /EHsc /Gd /JMC /permissive- /GS /Zi /Gm- /Od /sdl /MD src\main.cpp includes\glad.c lib/GLAD.lib lib/glfw3.lib opengl32.lib glu32.lib lib/assimp.lib lib/freetype.lib lib/irrKlang.lib lib/STB_IMAGE.lib lib/glew32s.lib kernel32.lib user32.lib gdi32.lib winspool.lib shell32.lib ole32.lib oleaut32.lib uuid.lib comdlg32.lib advapi32.lib lib/SOIL.lib odbc32.lib odbccp32.lib /I includes\ /I lib
Microsoft (R) C/C++ Optimizing Compiler Version 19.30.30709 for x64
Copyright (C) Microsoft Corporation.  All rights reserved.

main.cpp
C:\Users\zomon\Desktop\SadBoat\SBE\src\registry.h(16): error C7524: 'inline' specifier cannot appear on a block-scope declaration or non-static data member
C:\Users\zomon\Desktop\SadBoat\SBE\src\registry.h(120): note: see reference to class template instantiation 'Registry<Key,Content>' being compiled
Generating Code...
Compiling...
glad.c
Generating Code...
NMAKE : fatal error U1077: '"C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.30.30705\bin\HostX64\x64\cl.EXE"' : return code '0x2'
Stop.
NMAKE : fatal error U1077: '"C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.30.30705\bin\HostX64\x64\nmake.EXE"' : return code '0x2'
Stop.
Zomon333 commented 2 years ago

Issue was non-overloaded hash function in std::pair<int, int> which unordered_map relies on. See #8. Solved by changing key to int and adding wrapper to convert pair to int.