gpt4 book ai didi

c++ - 为什么匿名命名空间会出现重定义错误?

转载 作者:行者123 更新时间:2023-11-30 01:03:11 26 4
gpt4 key购买 nike

我有两个不同的文件 algo1.halgo2.h。在它们内部,我有用于 tolerance 的匿名命名空间。

算法1.h

namespace algo {
namespace {
double tolerance = 1e-6;
}
void algo1() {
//
}
} // namespace algo

alo2.h

namespace algo {
namespace {
double tolerance = 1e-6;
}
void algo2() {
//
}
} // namespace algo

主要.cpp

#include "algo1.h"
#include "algo2.h"

int main() { algo::algo1(); }

当我尝试编译时出现错误

error: redefinition of 'tolerance'

我认为匿名命名空间只存在于一个翻译单元中。这就是匿名命名空间的全部意义所在。可能是我遗漏了什么。任何人都可以帮助知道为什么我会收到此错误吗?

还有一些不错的选择设计,我可以在其中声明所有命名空间算法的容差。

最佳答案

未命名的命名空间的行为就好像它具有该翻译单元的唯一命名空间名称一样。所以 main.cpp 的翻译单元,在展开 #include 之后,是这样的:

namespace algo {
namespace unique_maincpp {
double tolerance = 1e-6;
}
void algo1() {
//
}
} // namespace algo

namespace algo {
namespace unique_maincpp {
double tolerance = 1e-6;
}
void algo2() {
}
} // namespace algo

int main() { algo::algo1(); }

显然您已经定义了两次 algo::unique_maincpp::tolerance

关于c++ - 为什么匿名命名空间会出现重定义错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54499737/

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