gpt4 book ai didi

c++ - 匿名命名空间和命名命名空间之间的函数重载

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

这是不允许的吗?谁能解释一下为什么?

算法.h

namespace Algorithms
{
int kthLargest(std::vector<int> const& nums, int k);
}

算法.cpp

#include "Algorithms.h"
namespace
{
int kthLargest(std::vector<int> const& nums, int start, int end, int k)
{
<implementation>
}
} // end anonymous namespace

namespace Algorithms
{
int kthLargest(std::vector<int> const& nums, int k)
{
return kthLargest(nums, 0, nums.size() - 1, k);
}
} // end Algorithms namespace

我遇到的错误是:

> /usr/bin/c++   -I../lib/algorithms/inc  -MD -MT
> lib/algorithms/CMakeFiles/algorithms.dir/src/Algorithms.o -MF
> lib/algorithms/CMakeFiles/algorithms.dir/src/Algorithms.o.d -o
> lib/algorithms/CMakeFiles/algorithms.dir/src/Algorithms.o -c
> ../lib/algorithms/src/Algorithms.cpp
> ../lib/algorithms/src/Algorithms.cpp: In function ‘int
> Algorithms::kthLargest(const std::vector<int>&, int)’:
> ../lib/algorithms/src/Algorithms.cpp:70:50: error: too many arguments
> to function ‘int Algorithms::kthLargest(const std::vector<int>&, int)’
> return kthLargest(nums, 0, nums.size() - 1, k);

最佳答案

您的代码导致递归调用。当在 Algorithms::kthLargest 中调用 kthLargest 时,将在命名空间 Algorithms 中找到名称 kthLargest,然后name lookup停止,将不会检查进一步的范围(例如全局 namespace )。之后,执行重载解析并失败,因为参数不匹配。

你可以把它改成

namespace Algorithms
{
int kthLargest(std::vector<int> const& nums, int k)
{
// refer to the name in global namespace
return ::kthLargest(nums, 0, nums.size() - 1, k);
// ^^
}
}

namespace Algorithms
{
using ::kthLargest; // introduce names in global namespace
int kthLargest(std::vector<int> const& nums, int k)
{
return kthLargest(nums, 0, nums.size() - 1, k);
}
}

关于c++ - 匿名命名空间和命名命名空间之间的函数重载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53983277/

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