gpt4 book ai didi

c++ - 错误 : wrong number of template arguments (0, 应该是 1)

转载 作者:行者123 更新时间:2023-11-28 02:48:41 27 4
gpt4 key购买 nike

我正在构建一个简单的文本分析器。我有以下代码:

template<typename FwdIt0, typename FwdIt1, typename Comp, typename Num>
Num SmartAnalyzer::count_intersection(FwdIt0 beg0, FwdIt0 end0, FwdIt1 beg1, FwdIt1 end1, Comp less, Num n)
{
while (beg0 != end0 && beg1 != end1)
{
if (less(*beg0, *beg1)) ++beg0;
else if (less(*beg1, *beg0)) ++beg1;
else
{
++n;
++beg0;
++beg1;
}
}

return n;
}

// Finds intersection between 2 sentences and divide it to the average sentence length
template<typename FwdIt0, typename FwdIt1>
double SmartAnalyzer::intersection_weight(FwdIt0 beg0, FwdIt0 end0, FwdIt1 beg1, FwdIt1 end1)
{
double const mid_size = 0.5 * (std::distance(beg0, end0) + std::distance(beg1, end1));
/* LINE 38 */ double const intsc = count_intersection(beg0, end0, beg1, end1, std::less<>(), double());
return intsc / mid_size;
}

当我尝试编译它时,我得到:

.. / lib / analyzer.cpp: In member function ‘double SmartAnalyzer::intersection_weight(FwdIt0, FwdIt0, FwdIt1, FwdIt1)’ :
.. / lib / analyzer.cpp : 38 : 76 : error : wrong number of template arguments(0, should be 1)

使用 Debian 上的 GCC 4.7。我认为这在某种程度上与 GCC 有关,直到 4.7+ 不支持模板别名,但我不知道如何修复它。我没有机会将 gcc 更新到 4.8。

最佳答案

这个对我有用(gcc 4.8)

正如我在评论中指出的那样,问题是您缺少 std::less 的模板参数(请注意,在 C++14 上 less 似乎获得了 specialization for void parameter )

我添加了一个新的模板参数X

#include <functional>
#include <iterator>
#include <vector>

template<typename FwdIt0, typename FwdIt1, typename Comp, typename Num>
Num count_intersection(FwdIt0 beg0, FwdIt0 end0, FwdIt1 beg1, FwdIt1 end1, Comp less, Num n)
{
while (beg0 != end0 && beg1 != end1)
{
if (less(*beg0, *beg1)) ++beg0;
else if (less(*beg1, *beg0)) ++beg1;
else
{
++n;
++beg0;
++beg1;
}
}

return n;
}

// Finds intersection between 2 sentences and divide it to the average sentence length
template<typename FwdIt0, typename FwdIt1,typename X>
double intersection_weight(FwdIt0 beg0, FwdIt0 end0, FwdIt1 beg1, FwdIt1 end1)
{
double const mid_size = 0.5 * (std::distance(beg0, end0) + std::distance(beg1, end1));
/* LINE 38 */ double const intsc = count_intersection(beg0, end0, beg1, end1, std::less<X>(), double());
return intsc / mid_size;
}


int main() {
std::vector<int> a;
std::vector<int> b;


intersection_weight<std::vector<int>::iterator,std::vector<int>::iterator,int>(a.begin(),a.end(),b.begin(),b.end());
}

关于c++ - 错误 : wrong number of template arguments (0, 应该是 1),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23556792/

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