C++中的命名空间重构
Namespace refactoring in C++
我正在重构大型项目的一小部分命名空间。所以我重构了以下 2 个文件,这些文件Oldname
作为要x::y::z
的命名空间。
文件1.hpp
namespace x::y::z
{
Class abc
{
public:
void funcA(type1 arg1, type2 arg2)
}
文件1.cpp
#include "file1.hpp"
namespace x::y::z
{
void abc::funcA(type1 arg1, type2 arg2)
{
--------
}
}
现在我正在解析与上述文件有依赖关系的文件 2。我不想更改此文件的命名空间,而只是修改依赖于上述文件的功能。
文件2.cpp
#include "file1.hpp"
namespace Oldname
{
void abc::funcA(type1 arg1, type2 arg2)
{
mock("txt")
.actualCall("abc.funcA")
.withParameter("arg1", arg1)
.withParameter("arg2", arg2)
}
}
我试图让它如下,
namespace Oldname
{
void x::y::z::abc::funcA(type1 arg1, type2 arg2)
{
mock("txt")
.actualcall("abc.funcA")
.withParameter("arg1",arg1)
.withParameter("arg2",arg2)
}
}
但是,我收到以下错误,
error: cannot define or redeclare 'funcA' here because namespace 'Oldname' does not enclose namespace 'abc'
有人可以帮助如何解决此错误吗?
从 cppreference.com(着重号添加(:
命名空间外定义和重新声明仅在声明点之后允许,仅在命名空间范围内,并且仅在包含原始命名空间(包括全局命名空间(的命名空间中,并且它们必须使用限定 id 语法
鉴于此规则,允许定义::x::y::z::abc::funcA
- 在类的定义(
::x::y::z::abc
(, - 在命名空间
::x::y::z
中, - 在命名空间
::x::y
中, - 在命名空间
::x
中,或 - 在全局命名空间中。
不允许在任何其他命名空间中使用。特别是,不允许在命名空间Oldname
中这样做。要解决此错误(不向file2.cpp
引入namespace x
(,请将您的定义从Oldname
中取出,并将其放在全局命名空间中。或者,也许可以重新考虑命名空间的设置方式。
相关文章:
- 命名空间中具有.h和.cpp文件的类
- 从父命名空间重载类型
- 在命名空间中定义函数还是限定函数
- C++:对不存在的命名空间使用命名空间指令
- 通过继承类使用来自不同命名空间的运算符
- 使用命名空间时出现多个定义错误
- CUDA内核和数学函数的显式命名空间
- 嵌套的匿名命名空间
- CMakeLists.txt中的命名空间表示法
- 类是C++中的命名空间吗
- 在命名空间中使用全局命名空间中的函数
- 如何使 std::sort 在 std::swap 和我的命名空间的模板化交换之间没有名称冲突?
- '使用命名空间{嵌套在另一个命名空间中的某个命名空间}"
- 是否可以将函数导入命名空间,但不能导出它?
- C++ C++类中的命名空间降级
- 如何使用 soong 命名空间来有条件地编译模块
- 使用 Clang++ 有没有办法将文件作为命名空间等包含?
- 使用 make 编译 MPI,几个命名空间错误,例如"错误:未知类型名称'使用'?
- 如何通过命名空间调用非静态方法
- C++中的命名空间重构