'GetSum':找不到匹配的重载函数如果我直接调用指针版本,它可以工作,但如果我可以直接传递容器,它显然会更整洁。
template<class T>
T GetSum(std::valarray<T>& vIn)
{
return GetSum(&vIn[0], vIn.size());
}
template<class T>
T GetSum(std::vector<T>& vIn)
{
return GetSum(&vIn[0], vIn.size()); // could use .data() here
}
// pointer version
template<class T>
T GetSum(T* vIn, size_t n)
{
T sum{};
for (size_t i = 0; i < n; ++i)
sum += vIn[i];
return sum;
}
void OnTest()
{
std::vector<double> vec(10, 1);
std::valarray<int> val(3, 10);
double x = GetSum(vec);
int i = GetSum(val);
...
抱歉我的无知,但是有人可以告诉我我做错了什么吗?
(仅供参考,我不久前问过一个关于这个主题的问题,这就是我如何让 C++17 代码正常工作,但现在我试图转移到 C++20 并发现我的代码不再工作)。
有人可以告诉我我做错了什么吗?问题
是你在声明它之前已经声明/定义了你试图调用GetSum
的指针版本。
//first declare/define this
template<class T>
T GetSum(T* vIn, size_t n)
{
T sum{};
for (size_t i = 0; i < n; ++i)
sum += vIn[i];
return sum;
}
//now you can use the above
template<class T>
T GetSum(std::vector<T>& vIn)
{
return GetSum(&vIn[0], vIn.size());
}
template<class T>
T GetSum(std::valarray<T>& vIn)
{
return GetSum(&vIn[0], vIn.size());
}