gpt4 book ai didi

c++ - 两个命名空间需要彼此

转载 作者:搜寻专家 更新时间:2023-10-31 01:35:17 25 4
gpt4 key购买 nike

如何编写相互需要的命名空间?像这样:

namespace AMXe
{
void Register(AMX *amx);
void Release(AMX *amx);
struct s_AMXe
{
Command::s_command command;
};
extern std::unordered_map<AMX*, s_AMXe*> *list;
}

namespace Command
{
extern DWORD OnPlayerCommandText_Addr;

void Initialize();
void RegisterAllFromAmx(AMX* amx, AMXe::s_AMXe* amxData);
cell Command_AddAltNamed_N(AMX *amx, cell *params);
struct s_command
{
int OnPlayerCommandReceived;
int OnPlayerCommandPerformed;
};
}

当我编译这段代码时,我收到警告,Command is not a namespace in "Command::s_command command;"行。

最佳答案

Command::s_command 的定义在您使用时不可用:

struct s_AMXe
{
Command::s_command command;
};

编译器在该行抛出错误是有道理的。

您可以在 namespace 中转发声明名称(类、函数等),就像您可以转发声明全局名称一样。

之后,您可以使用指向这些类型的指针和引用。但是,要在 namespace 中使用 class 的对象,必须首先定义 class

此外,请记住,与 class 不同,namespace 可以分为多个 block 。

您可以重新组织您的代码,如下所示:

// Define Command::s_command first.
namespace Command
{
struct s_command
{
int OnPlayerCommandReceived;
int OnPlayerCommandPerformed;
};
}

namespace AMXe
{
void Register(AMX *amx);
void Release(AMX *amx);
struct s_AMXe
{
Command::s_command command;
};
extern std::unordered_map<AMX*, s_AMXe*> *list;
}

// Define rest of Command namespace
namespace Command
{
extern DWORD OnPlayerCommandText_Addr;

void Initialize();
void RegisterAllFromAmx(AMX* amx, AMXe::s_AMXe* amxData);
cell Command_AddAltNamed_N(AMX *amx, cell *params);
}

关于c++ - 两个命名空间需要彼此,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37670740/

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