gpt4 book ai didi

c++ - Scripting::LState 的多重定义

转载 作者:行者123 更新时间:2023-11-28 04:31:52 25 4
gpt4 key购买 nike

以下代码无法编译。链接器输出此错误:'Scripting::LState' 的多重定义;/tmp/RandomLetters.o:(.bss+0x0): 首先在这里定义
我将 GCC 7.3.1 与 GNU Binutils 2.31.1 一起使用,参数为:
gcc src/scripting/**.cc src/main.cc -llua -lstdc++

代码如下:
main.cc

#include "includes/scripting.hpp"

int main() {
Scripting::Init();
Scripting::Close();
}

includes/scripting.hpp

extern "C" {
#include <lua.h>
#include <lauxlib.h>
#include <lualib.h>
}

#ifndef SCRIPTING_H
#define SCRIPTING_H

namespace Scripting {
lua_State *LState;
int Init();
int Close();
};

#endif

scripting/main.cc

#include "../includes/scripting.hpp"

int Scripting::Init() {
LState = luaL_newstate();
luaL_openlibs(LState);

luaL_loadstring(LState, "print('Hello World!');");

return 0;
}

int Scripting::Close() {
lua_close(LState);
return 0;
}

最佳答案

这是因为您在头文件中定义了一个变量。如果它包含在多个源文件中,则将它们链接在一起时会有多个定义。只需像这样在头文件中声明名称:

namespace Scripting {
extern lua_State *LState;
...

因此您只需声明变量并告诉编译器它存在于外部某处,因此他知道名称 LState。

然后在一个源文件中定义变量(你想为此使用 scripting/main.cc,其中也定义了方法):

lua_State* Scripting::LState = nullptr; // Or some other value

关于c++ - Scripting::LState 的多重定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52680424/

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