gpt4 book ai didi

c++ - “变量”声明为 'inline' 字段

转载 作者:行者123 更新时间:2023-12-02 16:30:54 25 4
gpt4 key购买 nike

相关源代码的 Github 存储库位于:https://github.com/arishackstv/cubemod

作为引用,这是我正在尝试根据自己的喜好修改的游戏 Cubeworld 的模组。

存储库有一个 CMakeLists.txt,我用它来生成 MinGW 生成文件,因为创建者说该 mod 是使用 MinGW 在 Release模式下构建的。这是我使用他的 CMakeLists.txt 的 CMake 配置:CMake Configuration

生成的 makefile 似乎没有问题,所以我尝试制作。我遇到了以下错误:Errors

绝大多数错误都遵循以下原则:

In file included from C:\Users\[username]\Desktop\cubemod-master\src\core\main.cpp:18:0:C:/Users/[username]/Desktop/CUBEMO~1/src/core/hook/hooks/artifact/display/hook_artifact_display_roundf.h:9:22: error: 'hook' declared as an 'inline' field   static inline Hook* hook;

很多这样的内联字段错误。产生上述特定错误的具体代码是这样的:

#pragma once

#include <hook/hook.h>
#include <game_structures.h>
#include "hook_concat_artifact_suffix.h"

class Hookroundf : public Hook
{
static inline Hook* hook;

//This is literally only called from the artifact display thing so it's fine
static float HOOK cube_roundf(float f)
{
//Get actual artifact stats
return Main::GetInstance().GetLocalPlayer()->GetIncreasedArtifactStats((ArtifactType)HookConcatArtifactSuffix::artifact_index, true);
}

public:
Hookroundf() : Hook(MemoryHelper::GetCubeBase() + 0x275760, (void*)cube_roundf, hook)
{}
};

这个人的 Github 的实际编译版本确实有效,我已经尝试过,所以我觉得他的源代码遇到编译错误很奇怪。我想知道这是否归结为我的构建环境设置不正确?如果有人能够成功编译此代码,我很想听听您的步骤,看看我做错了什么。如果这个源代码确实是错误的,我很想知道可以做些什么来修复它。静态内联字段不是 C++ 17 的东西吗?也许就是这样?虽然我尝试在 CMAKE_CXX_FLAGS 中指定 -std=C++17 但这似乎并没有做到。

编辑:升级我的 gcc 版本的建议非常有帮助。将 gcc 更新到最新可用版本 (9.20) 后,修复了与内联变量等不可用 C++ 功能相关的错误!现在还有一些错误,但数量要少得多。这是我们尝试制作的新输出:

C:\Users\[username]\Desktop\cubemod-master\BUILD_>make
Scanning dependencies of target cubemod
[ 33%] Building CXX object CMakeFiles/cubemod.dir/src/dllmain.cpp.obj
[ 66%] Building CXX object CMakeFiles/cubemod.dir/src/core/main.cpp.obj
[100%] Linking CXX shared library ..\bin\cubemod.cwmod
c:/mingw/bin/../lib/gcc/mingw32/9.2.0/../../../../mingw32/bin/ld.exe: CMakeFiles\cubemod.dir/objects.a(main.cpp.obj):main.cpp:(.text+0x2f): undefined reference to `xed_operand_values_set_mode'
c:/mingw/bin/../lib/gcc/mingw32/9.2.0/../../../../mingw32/bin/ld.exe: CMakeFiles\cubemod.dir/objects.a(main.cpp.obj):main.cpp:(.text$_ZN4Hook11InstallHookEv[__ZN4Hook11InstallHookEv]+0x11): undefined reference to `xed_tables_init'
c:/mingw/bin/../lib/gcc/mingw32/9.2.0/../../../../mingw32/bin/ld.exe: CMakeFiles\cubemod.dir/objects.a(main.cpp.obj):main.cpp:(.text$_ZN4Hook11InstallHookEv[__ZN4Hook11InstallHookEv]+0x89): undefined reference to `xed_decode'
collect2.exe: error: ld returned 1 exit status
make[2]: *** [../bin/cubemod.cwmod] Error 1
make[1]: *** [CMakeFiles/cubemod.dir/all] Error 2
make: *** [all] Error 2

我将开始调查这些新错误,如果有任何帮助,我将不胜感激。但我认为这篇文章的标题提出的特定问题可以被视为“已解决”。

最佳答案

来自您的 screenshot ,您正在使用 gcc 5.1.0。

如果你看看gcc standard compliance ,您将看到内联变量可从 gcc 7 获得。

因此,如果可能,您将必须升级您的工具链或使用您的版本中可用的工具链。

问候。

关于c++ - “变量”声明为 'inline' 字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63517204/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com