gpt4 book ai didi

c++ - 如何在命名空间中初始化外部变量

转载 作者:搜寻专家 更新时间:2023-10-31 00:09:04 26 4
gpt4 key购买 nike

我有一个 global.h 看起来像:

#pragma once

#include <memory>

namespace qe
{

class SubSystemA;
class SubSystemB;
class SubSystemC;

namespace Systems
{

extern std::unique_ptr<SubSystemA> gSubSystemA;
extern std::unique_ptr<SubSystemB> gSubSystemB;
extern std::unique_ptr<SubSystemC> gSubSystemC;

}

}

现在我不确定我是否可以在我的 main.cpp 中初始化它,但是我正在做,它不工作......请指教。这是 main 的样子:

#include "SubSystemA.h"
#include "SubSystemB.h"
#include "SubSystemC.h"
#include "global.h"

int main()
{

extern std::unique_ptr<qe::SubSystemA> qe::Systems::gSubSystemA;
extern std::unique_ptr<qe::SubSystemB> qe::Systems::gSubSystemB;
extern std::unique_ptr<qe::SubSystemC> qe::Systems::gSubSystemC;

qe::Systems::gSubSystemA = std::make_unique<qe::SubSystemA>();
qe::Systems::gSubSystemB = std::make_unique<qe::SubSystemB>();
qe::Systems::gSubSystemC = std::make_unique<qe::SubSystemC>();

return 0;
}

基本上我收到“未解析的外部符号”错误,我不确定如何修复它。感谢您的帮助!

编辑:虽然很高兴知道解决这个问题,但欢迎提出其他建议。我只想轻松(并不意味着全局,但我不介意)访问对象之类的子系统。

最佳答案

您应该在 main() 之外(即在命名空间范围内)定义(初始化)它们,并且不要使用 extern 说明符,它表示声明。例如

std::unique_ptr<qe::SubSystemA> qe::Systems::gSubSystemA = std::make_unique<qe::SubSystemA>();
std::unique_ptr<qe::SubSystemB> qe::Systems::gSubSystemB = std::make_unique<qe::SubSystemB>();
std::unique_ptr<qe::SubSystemC> qe::Systems::gSubSystemC = std::make_unique<qe::SubSystemC>();

int main()
{
...
}

关于c++ - 如何在命名空间中初始化外部变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45156833/

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