【问题标题】:Multiple redefinition of global variables error [duplicate]全局变量的多重重新定义错误[重复]
【发布时间】:2021-03-11 03:43:33
【问题描述】:

我在尝试编译时遇到多个全局变量定义错误:

/usr/bin/ld: ../grpc/server.o:(.bss+0x0): multiple definition of `TABLET[abi:cxx11]'; backend_server.o:(.bss+0x0): first defined here
/usr/bin/ld: ../grpc/server.o:(.data+0x0): multiple definition of `VB'; backend_server.o:(.data+0x0): first defined here
/usr/bin/ld: file_reader_functions/password_reader.o:(.bss+0x0): multiple definition of `TABLET[abi:cxx11]'; backend_server.o:(.bss+0x0): first defined here
/usr/bin/ld: file_reader_functions/password_reader.o:(.data+0x0): multiple definition of `VB'; backend_server.o:(.data+0x0): first defined here
/usr/bin/ld: file_reader_functions/file_writer.o:(.bss+0x0): multiple definition of `TABLET[abi:cxx11]'; backend_server.o:(.bss+0x0): first defined here
/usr/bin/ld: file_reader_functions/file_writer.o:(.data+0x0): multiple definition of `VB'; backend_server.o:(.data+0x0): first defined here

我在 backend/globals.h 中定义了我的全局变量:

#pragma once
#include <unordered_map>
#include <string>

using namespace std;

unordered_map<string, unordered_map<string, char*>> TABLET;
bool VB = true; // Verbose

然后在我使用这些全局变量的每个文件中,我只需包含这个 globals.h 文件。

我 100% 确定我没有在其他任何地方重新定义全局变量,也没有使用 extern。

我也尝试过使用老式的头卫:

#ifndef GLOBALS_H
#define GLOBALS_H
#include <unordered_map>
#include <string>

using namespace std;

unordered_map<string, unordered_map<string, char*>> TABLET;
bool VB = true; // Verbose

#endif

我遇到此问题的任何原因?

【问题讨论】:

  • C 在哪里?

标签: c++ header-files


【解决方案1】:

我 100% 确定我不会在其他任何地方重新定义全局变量

您在包含此头文件的每个源文件中定义它们。

相反,在单个源文件中定义它们,而是在头文件中extern 它们。您想在一个点定义它们,但您可以多次声明它们。

【讨论】:

    猜你喜欢
    • 2013-01-09
    • 2020-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-27
    相关资源
    最近更新 更多